From: <svn...@op...> - 2009-11-10 16:55:14
|
Author: bellmich Date: Tue Nov 10 17:55:01 2009 New Revision: 5954 URL: http://www.opensync.org/changeset/5954 Log: fixed DS server behaviour on changes - the change and change status callback must be configured in the data store - the data store configuration must be completed before the data store session is created and used - if the plugin is not ready to handle changes then the function should block until the according context is available Modified: plugins/syncml/trunk/src/syncml_callbacks.c plugins/syncml/trunk/src/syncml_common.c plugins/syncml/trunk/src/syncml_common.h plugins/syncml/trunk/src/syncml_ds_server.c Modified: plugins/syncml/trunk/src/syncml_callbacks.c ============================================================================== --- plugins/syncml/trunk/src/syncml_callbacks.c Tue Nov 10 17:41:31 2009 (r5953) +++ plugins/syncml/trunk/src/syncml_callbacks.c Tue Nov 10 17:55:01 2009 (r5954) @@ -348,7 +348,13 @@ if (!database) goto error; - g_assert(database->getChangesCtx); + if (!database->getChangesCtx) + { + /* This should only happen for DS servers. */ + g_assert(database->getChangesMutex); + g_mutex_trylock(database->getChangesMutex); + g_mutex_unlock(database->getChangesMutex); + } change = osync_change_new(&oerror); if (!change) { Modified: plugins/syncml/trunk/src/syncml_common.c ============================================================================== --- plugins/syncml/trunk/src/syncml_common.c Tue Nov 10 17:41:31 2009 (r5953) +++ plugins/syncml/trunk/src/syncml_common.c Tue Nov 10 17:55:01 2009 (r5954) @@ -52,6 +52,12 @@ database->alert_type_cond = NULL; } + if (database->getChangesMutex) { + g_mutex_free(database->getChangesMutex); + database->getChangesMutex = NULL; + } + + if (database->sink) { osync_objtype_sink_unref(database->sink); database->sink = NULL; Modified: plugins/syncml/trunk/src/syncml_common.h ============================================================================== --- plugins/syncml/trunk/src/syncml_common.h Tue Nov 10 17:41:31 2009 (r5953) +++ plugins/syncml/trunk/src/syncml_common.h Tue Nov 10 17:55:01 2009 (r5954) @@ -128,6 +128,7 @@ OSyncContext *connectCtx; OSyncContext *syncModeCtx; OSyncContext *getChangesCtx; + GMutex *getChangesMutex; OSyncContext *commitCtx; GHashTable *uid_updates; Modified: plugins/syncml/trunk/src/syncml_ds_server.c ============================================================================== --- plugins/syncml/trunk/src/syncml_ds_server.c Tue Nov 10 17:41:31 2009 (r5953) +++ plugins/syncml/trunk/src/syncml_ds_server.c Tue Nov 10 17:55:01 2009 (r5954) @@ -84,9 +84,13 @@ sml_data_sync_data_store_register_get_alert_type_callback(data_store, _get_alert_type, env); sml_data_sync_data_store_register_get_anchor_callback(data_store, _get_anchor, env); sml_data_sync_data_store_register_set_anchor_callback(data_store, _set_anchor, env); + sml_data_sync_data_store_register_change_callback(data_store, _recv_change, env); + sml_data_sync_data_store_register_change_status_callback(data_store, _recv_change_status, env); if (!sml_data_sync_add_data_store(env->dsObject1, data_store, &error)) goto error; database->data_store_1 = data_store; + + database->getChangesMutex = g_mutex_new(); } osync_list_free(list); @@ -117,9 +121,6 @@ database->getChangesCtx = ctx; osync_context_ref(database->getChangesCtx); - sml_data_sync_data_store_register_change_callback(database->data_store_1, _recv_change, env); - sml_data_sync_data_store_register_change_status_callback(database->data_store_1, _recv_change_status, env); - osync_trace(TRACE_EXIT, "%s", __func__); return; } |