From: <svn...@op...> - 2009-09-17 20:18:02
|
Author: dgollub Date: Thu Sep 17 22:17:50 2009 New Revision: 5789 URL: http://www.opensync.org/changeset/5789 Log: Get rid of g_malloc0() in osync_queue_setup_with_gmainloop() to avoid assert() on OOM conditions Modified: trunk/opensync/client/opensync_client.c trunk/opensync/client/opensync_client.h trunk/opensync/client/opensync_client_proxy.c trunk/opensync/client/osplugin.c trunk/opensync/ipc/opensync_queue.c trunk/opensync/ipc/opensync_queue_internals.h trunk/tests/client-tests/check_client.c trunk/tests/ipc-tests/check_ipc.c Modified: trunk/opensync/client/opensync_client.c ============================================================================== --- trunk/opensync/client/opensync_client.c Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/opensync/client/opensync_client.c Thu Sep 17 22:17:50 2009 (r5789) @@ -677,7 +677,9 @@ goto error; } - osync_client_set_outgoing_queue(client, outgoing); + if (!osync_client_set_outgoing_queue(client, outgoing, error)) + goto error; + osync_queue_cross_link(client->incoming, client->outgoing); osync_queue_unref(outgoing); osync_trace(TRACE_INTERNAL, "done connecting to engine"); @@ -1703,19 +1705,33 @@ } } -void osync_client_set_incoming_queue(OSyncClient *client, OSyncQueue *incoming) +osync_bool osync_client_set_incoming_queue(OSyncClient *client, OSyncQueue *incoming, OSyncError **error) { osync_queue_set_message_handler(incoming, _osync_client_message_handler, client); - osync_queue_setup_with_gmainloop(incoming, client->context); + + if (!osync_queue_setup_with_gmainloop(incoming, client->context, error)) + goto error; + client->incoming = osync_queue_ref(incoming); osync_queue_set_pending_limit(incoming, OSYNC_QUEUE_PENDING_LIMIT); + + return TRUE; + +error: + return FALSE; } -void osync_client_set_outgoing_queue(OSyncClient *client, OSyncQueue *outgoing) +osync_bool osync_client_set_outgoing_queue(OSyncClient *client, OSyncQueue *outgoing, OSyncError **error) { osync_queue_set_message_handler(outgoing, _osync_client_hup_handler, client); - osync_queue_setup_with_gmainloop(outgoing, client->context); + if (!osync_queue_setup_with_gmainloop(outgoing, client->context, error)) + goto error; + client->outgoing = osync_queue_ref(outgoing); + + return TRUE; +error: + return FALSE; } void osync_client_run_and_block(OSyncClient *client) @@ -1762,7 +1778,8 @@ if (!osync_queue_create(incoming, error)) goto error_free_queue; - osync_client_set_incoming_queue(client, incoming); + if (!osync_client_set_incoming_queue(client, incoming, error)) + goto error_remove_queue; client->thread = osync_thread_new(client->context, error); if (!client->thread) Modified: trunk/opensync/client/opensync_client.h ============================================================================== --- trunk/opensync/client/opensync_client.h Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/opensync/client/opensync_client.h Thu Sep 17 22:17:50 2009 (r5789) @@ -25,8 +25,8 @@ OSYNC_EXPORT OSyncClient *osync_client_ref(OSyncClient *client); OSYNC_EXPORT void osync_client_unref(OSyncClient *client); -OSYNC_EXPORT void osync_client_set_incoming_queue(OSyncClient *client, OSyncQueue *incoming); -OSYNC_EXPORT void osync_client_set_outgoing_queue(OSyncClient *client, OSyncQueue *outgoing); +OSYNC_EXPORT osync_bool osync_client_set_incoming_queue(OSyncClient *client, OSyncQueue *incoming, OSyncError **error); +OSYNC_EXPORT osync_bool osync_client_set_outgoing_queue(OSyncClient *client, OSyncQueue *outgoing, OSyncError **error); OSYNC_EXPORT void osync_client_run_and_block(OSyncClient *client); OSYNC_EXPORT osync_bool osync_client_run(OSyncClient *client, OSyncError **error); Modified: trunk/opensync/client/opensync_client_proxy.c ============================================================================== --- trunk/opensync/client/opensync_client_proxy.c Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/opensync/client/opensync_client_proxy.c Thu Sep 17 22:17:50 2009 (r5789) @@ -994,8 +994,12 @@ goto error_free_pipe2; - osync_client_set_incoming_queue(proxy->client, read1); - osync_client_set_outgoing_queue(proxy->client, write2); + if (!osync_client_set_incoming_queue(proxy->client, read1, error)) + goto error_free_pipe2; + + if (!osync_client_set_outgoing_queue(proxy->client, write2, error)) + goto error_free_pipe2; + osync_queue_cross_link(read1, write2); if (!osync_client_run(proxy->client, error)) @@ -1099,10 +1103,12 @@ } osync_queue_set_message_handler(proxy->incoming, _osync_client_proxy_message_handler, proxy); - osync_queue_setup_with_gmainloop(proxy->incoming, proxy->context); + if (!osync_queue_setup_with_gmainloop(proxy->incoming, proxy->context, error)) + goto error; osync_queue_set_message_handler(proxy->outgoing, _osync_client_proxy_hup_handler, proxy); - osync_queue_setup_with_gmainloop(proxy->outgoing, proxy->context); + if (!osync_queue_setup_with_gmainloop(proxy->outgoing, proxy->context, error)) + goto error; osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; Modified: trunk/opensync/client/osplugin.c ============================================================================== --- trunk/opensync/client/osplugin.c Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/opensync/client/osplugin.c Thu Sep 17 22:17:50 2009 (r5789) @@ -96,9 +96,13 @@ if (!osync_queue_connect(outgoing, OSYNC_QUEUE_SENDER, &error)) goto error; - osync_client_set_incoming_queue(client, incoming); + if (!osync_client_set_incoming_queue(client, incoming, &error)) + goto error; + osync_queue_unref(incoming); - osync_client_set_outgoing_queue(client, outgoing); + if (!osync_client_set_outgoing_queue(client, outgoing, &error)) + goto error; + osync_queue_unref(outgoing); } else { /* Create connection pipes **/ @@ -113,7 +117,9 @@ if (!osync_queue_connect(incoming, OSYNC_QUEUE_RECEIVER, &error)) goto error; - osync_client_set_incoming_queue(client, incoming); + if (!osync_client_set_incoming_queue(client, incoming, &error)) + goto error; + osync_queue_unref(incoming); } Modified: trunk/opensync/ipc/opensync_queue.c ============================================================================== --- trunk/opensync/ipc/opensync_queue.c Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/opensync/ipc/opensync_queue.c Thu Sep 17 22:17:50 2009 (r5789) @@ -1290,12 +1290,15 @@ osync_trace(TRACE_EXIT, "%s", __func__); } -void osync_queue_setup_with_gmainloop(OSyncQueue *queue, GMainContext *context) +osync_bool osync_queue_setup_with_gmainloop(OSyncQueue *queue, GMainContext *context, OSyncError **error) { OSyncQueue **queueptr = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, queue, context); - queue->incoming_functions = g_malloc0(sizeof(GSourceFuncs)); + queue->incoming_functions = osync_try_malloc0(sizeof(GSourceFuncs), error); + if (!queue->incoming_functions) + goto error; + queue->incoming_functions->prepare = _incoming_prepare; queue->incoming_functions->check = _incoming_check; queue->incoming_functions->dispatch = _incoming_dispatch; @@ -1316,6 +1319,11 @@ g_main_context_ref(context); osync_trace(TRACE_EXIT, "%s", __func__); + return TRUE; + +error: + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; } osync_bool osync_queue_dispatch(OSyncQueue *queue, OSyncError **error) Modified: trunk/opensync/ipc/opensync_queue_internals.h ============================================================================== --- trunk/opensync/ipc/opensync_queue_internals.h Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/opensync/ipc/opensync_queue_internals.h Thu Sep 17 22:17:50 2009 (r5789) @@ -164,9 +164,11 @@ * * @param queue The queue to set up * @param context The context to use. NULL for default loop + * @param error An OpenSync Error + * @return TRUE if successful, FALSE otherwise * */ -OSYNC_TEST_EXPORT void osync_queue_setup_with_gmainloop(OSyncQueue *queue, GMainContext *context); +OSYNC_TEST_EXPORT osync_bool osync_queue_setup_with_gmainloop(OSyncQueue *queue, GMainContext *context, OSyncError **error); /** * @brief Dispatches incoming data from the remote end Modified: trunk/tests/client-tests/check_client.c ============================================================================== --- trunk/tests/client-tests/check_client.c Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/tests/client-tests/check_client.c Thu Sep 17 22:17:50 2009 (r5789) @@ -55,8 +55,10 @@ fail_unless(osync_queue_connect(write2, OSYNC_QUEUE_SENDER, &error), NULL); fail_unless(error == NULL, NULL); - osync_client_set_incoming_queue(client, read1); - osync_client_set_outgoing_queue(client, write2); + fail_unless(osync_client_set_incoming_queue(client, read1, &error), NULL); + fail_unless(error == NULL, NULL); + fail_unless(osync_client_set_outgoing_queue(client, write2, &error), NULL); + fail_unless(error == NULL, NULL); OSyncMessage *message = osync_message_new(OSYNC_MESSAGE_NOOP, 0, &error); fail_unless(message != NULL, NULL); @@ -131,8 +133,10 @@ fail_unless(osync_queue_connect(write2, OSYNC_QUEUE_SENDER, &error), NULL); fail_unless(error == NULL, NULL); - osync_client_set_incoming_queue(client, read1); - osync_client_set_outgoing_queue(client, write2); + fail_unless(osync_client_set_incoming_queue(client, read1, &error), NULL); + fail_unless(error == NULL, NULL); + fail_unless(osync_client_set_outgoing_queue(client, write2, &error), NULL); + fail_unless(error == NULL, NULL); OSyncMessage *message = osync_message_new(OSYNC_MESSAGE_NOOP, 0, &error); fail_unless(message != NULL, NULL); @@ -208,8 +212,10 @@ fail_unless(osync_queue_connect(write2, OSYNC_QUEUE_SENDER, &error), NULL); fail_unless(error == NULL, NULL); - osync_client_set_incoming_queue(client, read1); - osync_client_set_outgoing_queue(client, write2); + fail_unless(osync_client_set_incoming_queue(client, read1, &error), NULL); + fail_unless(error == NULL, NULL); + fail_unless(osync_client_set_outgoing_queue(client, write2, &error), NULL); + fail_unless(error == NULL, NULL); OSyncMessage *message = osync_message_new(OSYNC_MESSAGE_NOOP, 0, &error); fail_unless(message != NULL, NULL); @@ -295,8 +301,10 @@ fail_unless(osync_queue_connect(write2, OSYNC_QUEUE_SENDER, &error), NULL); fail_unless(error == NULL, NULL); - osync_client_set_incoming_queue(client, read1); - osync_client_set_outgoing_queue(client, write2); + fail_unless(osync_client_set_incoming_queue(client, read1, &error), NULL); + fail_unless(error == NULL, NULL); + fail_unless(osync_client_set_outgoing_queue(client, write2, &error), NULL); + fail_unless(error == NULL, NULL); OSyncMessage *message = osync_message_new(OSYNC_MESSAGE_NOOP, 0, &error); fail_unless(message != NULL, NULL); Modified: trunk/tests/ipc-tests/check_ipc.c ============================================================================== --- trunk/tests/ipc-tests/check_ipc.c Thu Sep 17 22:16:15 2009 (r5788) +++ trunk/tests/ipc-tests/check_ipc.c Thu Sep 17 22:17:50 2009 (r5789) @@ -1085,7 +1085,8 @@ if (cpid == 0) { //Child osync_queue_set_message_handler(client_queue, client_handler1, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1122,7 +1123,8 @@ } else { osync_queue_set_message_handler(server_queue, server_handler1, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1272,7 +1274,8 @@ osync_queue_set_message_handler(client_queue, client_handler2, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1312,7 +1315,8 @@ osync_queue_set_message_handler(server_queue, server_handler2, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1451,7 +1455,8 @@ osync_queue_set_message_handler(client_queue, client_handler3, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1492,7 +1497,8 @@ osync_queue_set_message_handler(server_queue, server_handler_abort, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1655,7 +1661,8 @@ osync_queue_set_message_handler(client_queue, client_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1686,7 +1693,8 @@ osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1863,7 +1871,8 @@ osync_queue_set_message_handler(client_queue, client_handler2, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -1913,7 +1922,8 @@ osync_queue_set_message_handler(server_queue, server_handler2, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); + osync_assert(error == NULL); osync_thread_start(thread); @@ -2003,7 +2013,7 @@ osync_queue_set_message_handler(client_queue, client_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); osync_thread_start(thread); @@ -2044,7 +2054,7 @@ osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); @@ -2205,7 +2215,7 @@ osync_queue_set_message_handler(client_queue, client_handler5, GINT_TO_POINTER(1)); osync_queue_set_pending_limit(client_queue, OSYNC_QUEUE_PENDING_LIMIT); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); osync_thread_start(thread); @@ -2246,7 +2256,7 @@ osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); @@ -2393,7 +2403,7 @@ osync_queue_set_message_handler(client_queue, client_handler_sleep, GINT_TO_POINTER(1)); osync_queue_set_pending_limit(client_queue, OSYNC_QUEUE_PENDING_LIMIT); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); osync_thread_start(thread); @@ -2434,7 +2444,7 @@ osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); @@ -2538,7 +2548,7 @@ osync_queue_set_message_handler(client_queue, client_handler_sleep, GINT_TO_POINTER(1)); osync_queue_set_pending_limit(client_queue, OSYNC_QUEUE_PENDING_LIMIT); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); osync_thread_start(thread); @@ -2579,7 +2589,7 @@ osync_queue_set_message_handler(server_queue, server_handler_abort, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); @@ -2737,7 +2747,7 @@ // Set pending limit to 3 so response wil be delayed at most 3 seconds osync_queue_set_pending_limit(client_queue, 3); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); osync_thread_start(thread); @@ -2784,7 +2794,7 @@ osync_queue_set_message_handler(server_queue, server_handler_abort, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); @@ -2923,7 +2933,7 @@ osync_queue_set_message_handler(client_queue, client_handler6, GINT_TO_POINTER(1)); osync_queue_set_pending_limit(client_queue, OSYNC_QUEUE_PENDING_LIMIT); - osync_queue_setup_with_gmainloop(client_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); osync_thread_start(thread); @@ -2963,7 +2973,7 @@ osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); @@ -3062,7 +3072,7 @@ osync_queue_set_pending_limit(client_queue, OSYNC_QUEUE_PENDING_LIMIT); /* Do not start receiver */ - /* osync_queue_setup_with_gmainloop(client_queue, context); */ + /* osync_assert(osync_queue_setup_with_gmainloop(client_queue, context, &error)); */ osync_thread_start(thread); @@ -3102,7 +3112,7 @@ osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - osync_queue_setup_with_gmainloop(server_queue, context); + osync_assert(osync_queue_setup_with_gmainloop(server_queue, context, &error)); osync_thread_start(thread); |