Mercurial > pidgin
comparison src/signals.c @ 10789:0caa9827edf5
[gaim-migrate @ 12431]
" The following log snippets should explain it: " --rlaager
(20:24:00) rlaager: Regarding the signal handling
conversation the other day... I've written a patch to stop
calling signal handlers and return as soon as we find one
signal handler that returns TRUE to indicate that it's
handled the signal. Is this the right approach?
(20:24:22) Ethan Blanton (Paco-Paco): the trouble is that it's
documented to behave exactly the way it does
(20:24:31) Ethan Blanton (Paco-Paco): so changing it is
notbackwards compatible
(20:24:31) rlaager: I'm talking for HEAD.
(20:24:41) Ethan Blanton (Paco-Paco): oh, I think that's a
good approach, yes
(20:24:53) rlaager: The way I've described is how I
*expected* it to work, having not read the documentation.
(20:25:09) Ethan Blanton (Paco-Paco): I'm convinced
(20:27:04) Stu Tomlinson (nosnilmot): rlaager: this, I
assume, breaks the generic-ness of signals, by assuming
that any that return values return booleans?
(20:27:26) Ethan Blanton (Paco-Paco): please break it
(20:27:33) Ethan Blanton (Paco-Paco): we already have
out-parameters
(20:27:42) rlaager: nosnilmot: from what I can see, the
return type is handled as a (void *)... so I'm checking that
ret_value != NULL
(20:27:57) rlaager: nosnilmot: that's the correct way to do it,
right?
...
(20:29:01) Ethan Blanton (Paco-Paco): allowing a
meaningful return value is an over-engineering
(20:30:07) rlaager: even after this patch, you should be able
to return meaningful return values
(20:30:15) rlaager: it'll just short-circuit on the first handler
that does
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Thu, 07 Apr 2005 14:55:02 +0000 |
parents | c80a609bd747 |
children | 50224ac8184d |
comparison
equal
deleted
inserted
replaced
10788:19de830330cf | 10789:0caa9827edf5 |
---|---|
510 va_list args) | 510 va_list args) |
511 { | 511 { |
512 GaimInstanceData *instance_data; | 512 GaimInstanceData *instance_data; |
513 GaimSignalData *signal_data; | 513 GaimSignalData *signal_data; |
514 GaimSignalHandlerData *handler_data; | 514 GaimSignalHandlerData *handler_data; |
515 void *ret_val = NULL; | |
516 GList *l, *l_next; | 515 GList *l, *l_next; |
517 va_list tmp; | 516 va_list tmp; |
518 | 517 |
519 g_return_val_if_fail(instance != NULL, NULL); | 518 g_return_val_if_fail(instance != NULL, NULL); |
520 g_return_val_if_fail(signal != NULL, NULL); | 519 g_return_val_if_fail(signal != NULL, NULL); |
534 return 0; | 533 return 0; |
535 } | 534 } |
536 | 535 |
537 for (l = signal_data->handlers; l != NULL; l = l_next) | 536 for (l = signal_data->handlers; l != NULL; l = l_next) |
538 { | 537 { |
538 void *ret_val = NULL; | |
539 | |
539 l_next = l->next; | 540 l_next = l->next; |
540 | 541 |
541 handler_data = (GaimSignalHandlerData *)l->data; | 542 handler_data = (GaimSignalHandlerData *)l->data; |
542 | 543 |
543 G_VA_COPY(tmp, args); | 544 G_VA_COPY(tmp, args); |
550 { | 551 { |
551 signal_data->marshal(handler_data->cb, tmp, | 552 signal_data->marshal(handler_data->cb, tmp, |
552 handler_data->data, &ret_val); | 553 handler_data->data, &ret_val); |
553 } | 554 } |
554 va_end(tmp); | 555 va_end(tmp); |
555 } | 556 |
556 | 557 if (ret_val != NULL) |
557 return ret_val; | 558 return ret_val; |
559 } | |
560 | |
561 return NULL; | |
558 } | 562 } |
559 | 563 |
560 void | 564 void |
561 gaim_signals_init() | 565 gaim_signals_init() |
562 { | 566 { |