diff --git a/gobject/gsignal.c b/gobject/gsignal.c index 951ee07dc..77d8f211e 100644 --- a/gobject/gsignal.c +++ b/gobject/gsignal.c @@ -3759,9 +3759,14 @@ signal_emit_unlocked_R (SignalNode *node, node->n_params + 1, instance_and_params, &emission.ihint); + if (!accumulate (&emission.ihint, emission_return, &accu, accumulator) && + emission.state == EMISSION_RUN) + emission.state = EMISSION_STOP; if (need_unset) g_value_unset (&accu); SIGNAL_LOCK (); + return_value_altered = TRUE; + emission.chain_type = G_TYPE_NONE; if (emission.state == EMISSION_RESTART) diff --git a/tests/gobject/testgobject.c b/tests/gobject/testgobject.c index 02cfc56f9..df7d4c748 100644 --- a/tests/gobject/testgobject.c +++ b/tests/gobject/testgobject.c @@ -416,7 +416,7 @@ main (int argc, g_print ("MAIN: emit test-signal:\n"); g_signal_emit_by_name (dobject, "test-signal", sigarg, NULL, &string); g_message ("signal return: \"%s\"", string); - g_assert (strcmp (string, "") == 0); + g_assert_cmpstr (string, ==, ""); g_free (string); g_print ("MAIN: call iface print-string on test and derived object:\n");