summaryrefslogtreecommitdiff
blob: fcafd00bdfc8d00bc143d6d1b8616c979eaa3700 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Index: src/signals.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/signals.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -u -r1.13 -r1.14
--- src/signals.c	10 Jan 2004 04:04:56 -0000	1.13
+++ src/signals.c	13 Jan 2004 02:15:46 -0000	1.14
@@ -415,6 +415,7 @@
 	GaimSignalData *signal_data;
 	GaimSignalHandlerData *handler_data;
 	GList *l, *l_next;
+	va_list tmp;
 
 	g_return_if_fail(instance != NULL);
 	g_return_if_fail(signal   != NULL);
@@ -440,16 +441,22 @@
 
 		handler_data = (GaimSignalHandlerData *)l->data;
 
+		/* This is necessary because a va_list may only be
+		 * evaluated once */
+		va_copy(tmp, args);
+
 		if (handler_data->use_vargs)
 		{
-			((void (*)(va_list, void *))handler_data->cb)(args,
+			((void (*)(va_list, void *))handler_data->cb)(tmp,
 														  handler_data->data);
 		}
 		else
 		{
-			signal_data->marshal(handler_data->cb, args,
+			signal_data->marshal(handler_data->cb, tmp,
 								 handler_data->data, NULL);
 		}
+
+		va_end(tmp);
 	}
 }