Pidgin opens identical second tab if server sends JOIN without PART first. #525

Closed
opened 2026-10-05 04:27:27 +02:00 by adam · 11 comments
Owner

(parallel bug has been filed as https://developer.pidgin.im/ticket/11255)

If the server sends JOIN twice, you end up with 2 channels tabs, on the same network, with the same name.

Example: I am using the ZNC bouncer, sitting on #test. ZNC gets disconnected from the IRC network. ZNC reconnects to the IRC network. ZNC re-joins #test. Pidgin shows 2 tabs for #test, both look identical. I've attached a raw log of this.

Expected behaviour: Pidgin should not open another tab, and instead use the existing tab.

You are probably correct that this is a libpurple IRC bug. However, it is certainly a ZNC bug. I suggest you get your bouncer fixed, as well.

(parallel bug has been filed as https://developer.pidgin.im/ticket/11255) If the server sends JOIN twice, you end up with 2 channels tabs, on the same network, with the same name. Example: I am using the ZNC bouncer, sitting on #test. ZNC gets disconnected from the IRC network. ZNC reconnects to the IRC network. ZNC re-joins #test. Pidgin shows 2 tabs for #test, both look identical. I've attached a raw log of this. Expected behaviour: Pidgin should not open another tab, and instead use the existing tab. > You are probably correct that this is a libpurple IRC bug. However, it is _certainly_ a ZNC bug. I suggest you get your bouncer fixed, as well. <!-- github-sync-id:83713865 -->
adam closed this issue 2026-10-05 04:27:27 +02:00
Author
Owner

This issue looks to be Pidgin specific - the same set of test parameters in other IRC clients results in no such issue, so it is likely less a ZNC bug and more a client issue.

This issue looks to be Pidgin specific - the same set of test parameters in other IRC clients results in no such issue, so it is likely less a ZNC bug and more a client issue. <!-- github-comment-id:107733340 -->
Author
Owner

Well, it seems to me weird ... when the client disconnects abruptly, it cannot be expected that it /PARTs properly, so IMHO ZNC should check when opening new channel that there isn't already one hanging on.

Well, it seems to me weird ... when the client disconnects abruptly, it cannot be expected that it `/PARTs` properly, so IMHO `ZNC` should check when opening new channel that there isn't already one hanging on. <!-- github-comment-id:107734714 -->
Author
Owner

I don't think ZNC can be aware of the channels that are open on your client. When you connect to ZNC it sends JOINs for every channel you are joined to. But on a disconnect you are no longer on those channels, so I'd imagine it should be safe to assume you have parted those as you are no longer in them, or you might very well be an entirely different client.

This type of issue also sounds like it can be reproduced without the use of znc, so I'm not entirely sure if I'd classify it as a ZNC issue.

I don't think ZNC can be aware of the channels that are open on your client. When you connect to ZNC it sends JOINs for every channel you are joined to. But on a disconnect you are no longer on those channels, so I'd imagine it should be safe to assume you have parted those as you are no longer in them, or you might very well be an entirely different client. This type of issue also sounds like it can be reproduced without the use of znc, so I'm not entirely sure if I'd classify it as a ZNC issue. <!-- github-comment-id:107737628 -->
Author
Owner

@mcepi I'm almost certain ZNC can't be aware of what's open in a client. There's no standard 'API' or way to query the client as to what windows are open, in a way which all IRC clients can provide those kinds of details to the ZNC.

This is not something that can be addressed as part of ZNC, I believe, since there's no way to query the information about what windows are or are not open in the client.

@mcepi I'm almost certain ZNC can't be aware of what's open in a client. There's no standard 'API' or way to query the client as to what windows are open, in a way which all IRC clients can provide those kinds of details to the ZNC. This is not something that can be addressed as part of ZNC, I believe, since there's no way to query the information about what windows are or are not open in the client. <!-- github-comment-id:107739894 -->
Author
Owner

Pidgin is NOT a real IRC client.

Pidgin is NOT a real IRC client. <!-- github-comment-id:107739964 -->
Author
Owner

Echo what @KindOne- said. Pidgin is not a real IRC client, either, and shouldn't be treated as one.

Echo what @KindOne- said. Pidgin is not a real IRC client, either, and shouldn't be treated as one. <!-- github-comment-id:107740179 -->
Author
Owner

From http://paste.fedoraproject.org/227922/24457143/

[07:48] <yitz_> I would blame Pidgin on handling multiple JOINs poorly. I would blame ZNC for sending multiple JOINs without a PART.
[07:48] <yitz_> Two unrelated issues

Why do we have http://wiki.znc.in/Disconkick as a loadable module instead of it being in core and always on?

From http://paste.fedoraproject.org/227922/24457143/ > [07:48] <yitz_> I would blame Pidgin on handling multiple JOINs poorly. I would blame ZNC for sending multiple JOINs without a PART. > [07:48] <yitz_> Two unrelated issues Why do we have http://wiki.znc.in/Disconkick as a loadable module instead of it being in core and always on? <!-- github-comment-id:107827693 -->
Author
Owner

Why do we have http://wiki.znc.in/Disconkick as a loadable module instead it being in core and always on?

👍 that module is must-load and I have it always loaded, losing connection is too confusing otherwise.

> Why do we have http://wiki.znc.in/Disconkick as a loadable module instead it being in core and always on? :+1: that module is must-load and I have it always loaded, losing connection is too confusing otherwise. <!-- github-comment-id:107831261 -->
Author
Owner

that module is must-load and I have it always loaded, losing connection is too confusing otherwise.

Do I miss something? When reading http://wiki.znc.in/Disconkick it seems to me that this works when ZNC is discontinued from the IRC not the other side of ZNC between the bouncer and the client, doesn’t it?

> that module is must-load and I have it always loaded, losing connection is too confusing otherwise. Do I miss something? When reading http://wiki.znc.in/Disconkick it seems to me that this works when ZNC is discontinued from the IRC not the other side of ZNC between the bouncer and the client, doesn’t it? <!-- github-comment-id:107971636 -->
Author
Owner

Of course, when ZNC is disconnected from IRC server.
Your issue happens when what disconnects from what?

Of course, when ZNC is disconnected from IRC server. Your issue happens when what disconnects from what? <!-- github-comment-id:108061553 -->
Author
Owner

@DarthGandalf his issue is when the link with a // in it below is flapping or disconnects briefly, from what I can tell as discussed above:

IRC Client <--//--> ZNC <------> IRC Server

The referenced Pidgin bug states that when IRC <----> ZNC is reestablished, Pidgin shows duplicate tabs for the channels and such.

@DarthGandalf his issue is when the link with a `//` in it below is flapping or disconnects briefly, from what I can tell as discussed above: ``` IRC Client <--//--> ZNC <------> IRC Server ``` The referenced Pidgin bug states that when `IRC <----> ZNC` is reestablished, Pidgin shows duplicate tabs for the channels and such. <!-- github-comment-id:108064952 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/znc#525