[PATCH] Fix for double initialization of silc plugin in irssi (resulting in duplication of "action" messsages)

Skywing Skywing at valhallalegends.com
Wed Mar 26 22:01:59 CET 2008


Hi,

This patch fixes an issue in 1.1.4 compiled as a silc plugin for irssi, wherein all silc action messages (e.g. /me) get painted to the window twice.  This may fix other problems too, as the underlying issue was that the silc init functions were being called twice (resulting in silc registering for the "silc action message" signals twice, among other things).

I'm not sure if this causes any problems for the silc standalone client (as opposed to the irssi loadable plugin module).  It definitely fixes obvious breakage in the loadable plugin module, though.

- S

--


diff -ru silc_orig/apps/irssi/src/fe-common/silc/fe-common-silc.c silc-client-1.1.4/apps/irssi/src/fe-common/silc/fe-common-silc.c
--- silc_orig/apps/irssi/src/fe-common/silc/fe-common-silc.c    2008-03-14 07:05:55.000000000 -0500
+++ silc-client-1.1.4/apps/irssi/src/fe-common/silc/fe-common-silc.c    2008-03-26 12:51:03.000000000 -0500
@@ -33,15 +33,20 @@
 void fe_silc_modules_init(void);
 void fe_silc_modules_deinit(void);

+static int silc_init_count = 0;
+
 static void silc_init(void)
 {
-  theme_register(fecommon_silc_formats);
-
-  fe_silc_channels_init();
-  fe_silc_modules_init();
-  fe_silc_messages_init();
-  fe_silc_queries_init();
-  fe_silcnet_init();
+  if (++silc_init_count == 1)
+  {
+    theme_register(fecommon_silc_formats);
+
+    fe_silc_channels_init();
+    fe_silc_modules_init();
+    fe_silc_messages_init();
+    fe_silc_queries_init();
+    fe_silcnet_init();
+  }
 }

 void fe_common_silc_init(void)
@@ -58,13 +63,16 @@

 void fe_common_silc_deinit(void)
 {
-  fe_silc_queries_deinit();
-  fe_silc_messages_deinit();
-  fe_silc_modules_deinit();
-  fe_silc_channels_deinit();
-  fe_silcnet_deinit();
+  if(--silc_init_count == 0)
+  {
+    fe_silc_queries_deinit();
+    fe_silc_messages_deinit();
+    fe_silc_modules_deinit();
+    fe_silc_channels_deinit();
+    fe_silcnet_deinit();

-  theme_unregister();
+    theme_unregister();
+  }
 }

 void fe_silc_deinit(void)


More information about the silc-devel mailing list