# HG changeset patch # User Christian Hammond # Date 1073286236 0 # Node ID 07dc83303503d7ff5b4dd1fb74d9696b0398d490 # Parent b9d3d397a195a420b4a4c1c33b365a948aad90a5 [gaim-migrate @ 8681] Removing a signal handler while a signal is being emitted could crash Gaim. This should now be fixed. committer: Tailor Script diff -r b9d3d397a195 -r 07dc83303503 src/signals.c --- a/src/signals.c Mon Jan 05 06:16:48 2004 +0000 +++ b/src/signals.c Mon Jan 05 07:03:56 2004 +0000 @@ -412,7 +412,7 @@ GaimInstanceData *instance_data; GaimSignalData *signal_data; GaimSignalHandlerData *handler_data; - GList *l; + GList *l, *l_next; g_return_if_fail(instance != NULL); g_return_if_fail(signal != NULL); @@ -432,8 +432,10 @@ return; } - for (l = signal_data->handlers; l != NULL; l = l->next) + for (l = signal_data->handlers; l != NULL; l = l_next) { + l_next = l->next; + handler_data = (GaimSignalHandlerData *)l->data; if (handler_data->use_vargs) @@ -473,7 +475,7 @@ GaimSignalData *signal_data; GaimSignalHandlerData *handler_data; void *ret_val = NULL; - GList *l; + GList *l, *l_next; g_return_val_if_fail(instance != NULL, NULL); g_return_val_if_fail(signal != NULL, NULL); @@ -493,8 +495,10 @@ return 0; } - for (l = signal_data->handlers; l != NULL; l = l->next) + for (l = signal_data->handlers; l != NULL; l = l_next) { + l_next = l->next; + handler_data = (GaimSignalHandlerData *)l->data; if (handler_data->use_vargs)