From: <svn...@op...> - 2009-03-30 20:26:44
|
Author: henrik Date: Mon Mar 30 22:26:32 2009 New Revision: 5474 URL: http://www.opensync.org/changeset/5474 Log: Updated mozilla-sync to latest API changes. However, we assert on: opensync_hashtable.c:283:E:osync_hashtable_slowsync: Assertion 'table' failed Modified: plugins/mozilla-sync/trunk/src/mozilla-sync.cpp plugins/mozilla-sync/trunk/src/mozilla-sync.h Modified: plugins/mozilla-sync/trunk/src/mozilla-sync.cpp ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-sync.cpp Mon Mar 30 22:23:58 2009 (r5473) +++ plugins/mozilla-sync/trunk/src/mozilla-sync.cpp Mon Mar 30 22:26:32 2009 (r5474) @@ -71,7 +71,7 @@ #include <opensync/opensync-version.h> #include <opensync/opensync-data.h> #include <opensync/opensync-helper.h> -#include <opensync/opensync-capabilitiesr.h> +#include <opensync/opensync-capabilities.h> #include <opensync/opensync-xmlformat.h> #include "mozilla-xpcom.h" @@ -88,7 +88,6 @@ #include <libgen.h> #endif - #define LOGLEVEL 10000 /** Log a message using the @c pLogFunction passed **/ @@ -202,7 +201,8 @@ gboolean mozilla_sync_report_addressbook_changes_to_hash( OSyncMozillaDatabase *pOSyncMozillaDatabase, OSyncPluginInfo *pOSyncPluginInfo, - OSyncContext *pOSyncContext) { + OSyncContext *pOSyncContext, + OSyncHashTable *pHashTable) { LOG_ENTRY(10, "(%p, %p, %p)", pOSyncMozillaDatabase, pOSyncPluginInfo, pOSyncContext); @@ -214,7 +214,6 @@ OSyncError *pError = NULL; ThunderbirdAddressbook *pAB = pOSyncMozillaDatabase->pThunderbirdAddressbook; - OSyncHashTable *pHT = pOSyncMozillaDatabase->pOSyncHashTable; char *szError=NULL; if (!pAB->CardFirst(&szError, &logFunction)) @@ -242,9 +241,9 @@ // Identify the change osync_change_set_uid(pChange, szKey); osync_change_set_hash(pChange, szHash); - OSyncChangeType type = osync_hashtable_get_changetype(pHT, pChange); + OSyncChangeType type = osync_hashtable_get_changetype(pHashTable, pChange); osync_change_set_changetype(pChange, type); - osync_hashtable_update_change(pHT, pChange); + osync_hashtable_update_change(pHashTable, pChange); g_free(szHash); g_free(szKey); @@ -333,7 +332,8 @@ gboolean mozilla_sync_report_calendar_changes_to_hash( OSyncMozillaDatabase *pOSyncMozillaDatabase, OSyncPluginInfo *pOSyncPluginInfo, - OSyncContext *pOSyncContext) { + OSyncContext *pOSyncContext, + OSyncHashTable *pHashTable) { LOG_ENTRY(10, "(%p, %p, %p)", pOSyncMozillaDatabase, pOSyncPluginInfo, pOSyncContext); @@ -344,7 +344,6 @@ } OSyncError *pError = NULL; MozillaCalendar *pCal = pOSyncMozillaDatabase->pMozillaCalendar; - OSyncHashTable *pHT = pOSyncMozillaDatabase->pOSyncHashTable; char *szError=NULL; if (!pCal->EventFirst(&szError, &logFunction)) @@ -378,9 +377,9 @@ // Identify the change osync_change_set_uid(pChange, szKey); osync_change_set_hash(pChange, szHash); - OSyncChangeType type = osync_hashtable_get_changetype(pHT, pChange); + OSyncChangeType type = osync_hashtable_get_changetype(pHashTable, pChange); osync_change_set_changetype(pChange, type); - osync_hashtable_update_change(pHT, pChange); + osync_hashtable_update_change(pHashTable, pChange); g_free(szHash); // Bail out if no changes @@ -460,11 +459,11 @@ int i = 0; OSyncError *pError = NULL; + OSyncHashTable *pHashTable = osync_objtype_sink_get_hashtable(pOSyncObjTypeSink); // Thank you Michael Bell for corrections - // &&& osync_hashtable_reset_reports(pOSyncMozillaDatabase->pOSyncHashTable); - if (osync_objtype_sink_get_slowsync(pOSyncMozillaDatabase->pOSyncObjTypeSink) || fSlow) { + if (fSlow) { osync_trace(TRACE_INTERNAL, "Slow sync requested"); - if (!osync_hashtable_slowsync(pOSyncMozillaDatabase->pOSyncHashTable, &pError)) + if (!osync_hashtable_slowsync(pHashTable, &pError)) { osync_context_report_osyncerror(pOSyncContext, pError); osync_trace(TRACE_EXIT_ERROR, "%s - %s", __func__, osync_error_print_stack(&pError)); @@ -478,9 +477,9 @@ gboolean f; if (pOSyncMozillaDatabase->iMozillaDatabaseType==MOZILLA_DATABASE_TYPE_ADDRESSBOOK) { - f=mozilla_sync_report_addressbook_changes_to_hash(pOSyncMozillaDatabase, pOSyncPluginInfo, pOSyncContext); + f=mozilla_sync_report_addressbook_changes_to_hash(pOSyncMozillaDatabase, pOSyncPluginInfo, pOSyncContext, pHashTable); } else if (pOSyncMozillaDatabase->iMozillaDatabaseType==MOZILLA_DATABASE_TYPE_CALENDAR) { - f=mozilla_sync_report_calendar_changes_to_hash(pOSyncMozillaDatabase, pOSyncPluginInfo, pOSyncContext); + f=mozilla_sync_report_calendar_changes_to_hash(pOSyncMozillaDatabase, pOSyncPluginInfo, pOSyncContext, pHashTable); } else { LOG_EXIT_REPORT_ERROR_SZ(10, pOSyncContext, "Unknown iMozillaDatabaseType"); return; } @@ -498,7 +497,7 @@ LOG(10, "Checking for deleted [%s]", osync_objtype_sink_get_name(pOSyncObjTypeSink)); OSyncList *u; - OSyncList *uids = osync_hashtable_get_deleted(pOSyncMozillaDatabase->pOSyncHashTable); + OSyncList *uids = osync_hashtable_get_deleted(pHashTable); for (u = uids; u; u = u->next) { OSyncChange *change = osync_change_new(&pError); if (!change) { @@ -525,7 +524,7 @@ osync_context_report_change(pOSyncContext, change); - osync_hashtable_update_change(pOSyncMozillaDatabase->pOSyncHashTable, change); + osync_hashtable_update_change(pHashTable, change); osync_change_unref(change); } @@ -704,7 +703,7 @@ OSyncMozillaDatabase *pOSyncMozillaDatabase = (OSyncMozillaDatabase*) data; - OSyncHashTable *pHT = pOSyncMozillaDatabase->pOSyncHashTable; + OSyncHashTable *pHT = osync_objtype_sink_get_hashtable(pOSyncObjTypeSink); gboolean f; @@ -768,17 +767,11 @@ LOG(10, "Updating anchor to value [%s]", db->szAnchorValue); OSyncAnchor *anchor = osync_objtype_sink_get_anchor(pOSyncObjTypeSink); - if (!osync_anchor_update(anchor, db->szAnchorValue, &error)) { + if (!osync_anchor_update(anchor, db->szAnchorKey, db->szAnchorValue, &error)) { osync_context_report_osyncerror(pOSyncContext, error); LOG_EXIT_ERROR_OSYNC_SZ(10, &error, "Could not do osync_anchor_update"); return; } - LOG(10, "Updating hash table"); - if (!osync_hashtable_save(db->pOSyncHashTable, &error)) { - osync_context_report_osyncerror(pOSyncContext, error); - LOG_EXIT_ERROR_OSYNC_SZ(10, &error, "Could not save osync_hashtable_save"); - return; } - osync_context_report_success(pOSyncContext); LOG_EXIT(10, "void"); } @@ -811,29 +804,14 @@ osync_objtype_sink_set_batchcommit_timeout(pOSyncObjTypeSink, 4*60); // 4 minutes osync_objtype_sink_set_committedall_timeout(pOSyncObjTypeSink, 4*60); // 4 minutes osync_objtype_sink_set_syncdone_timeout(pOSyncObjTypeSink, 4*60); // 4 minutes - osync_objtype_sink_set_write_timeout(pOSyncObjTypeSink, 4*60); // 4 minutes osync_objtype_sink_set_read_timeout(pOSyncObjTypeSink, 4*60); // 4 minutes - char *tablepath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "hashtable.db", osync_plugin_info_get_configdir(pOSyncPluginInfo)); - LOG(10, "Initializing hashtable [%s]", tablepath); - // Note that despite it's name, osync_hashtable_new, will re-use the hash-table, if it exists - db->pOSyncHashTable = osync_hashtable_new(tablepath, osync_objtype_sink_get_name(pOSyncObjTypeSink), &error); - g_free(tablepath); - - if (!db->pOSyncHashTable) { - osync_context_report_osyncerror(pOSyncContext, error); - LOG_EXIT_ERROR_OSYNC_SZ(10, &error, "Could not create osync_hashtable_new"); - return; } - - if (!osync_hashtable_load(db->pOSyncHashTable, &error)) { - osync_context_report_osyncerror(pOSyncContext, error); - LOG_EXIT_ERROR_OSYNC_SZ(10, &error, "Could not load osync_hashtable_load"); - return; } + osync_objtype_sink_enable_anchor(pOSyncObjTypeSink, TRUE); OSyncAnchor *anchor = osync_objtype_sink_get_anchor(pOSyncObjTypeSink); osync_bool same; - if (!osync_anchor_compare(anchor, db->szAnchorValue, &same, &error)) { + if (!osync_anchor_compare(anchor, db->szAnchorKey, db->szAnchorValue, &same, &error)) { osync_context_report_osyncerror(pOSyncContext, error); LOG_EXIT_ERROR_OSYNC_SZ(10, &error, "Could not do osync_anchor_compare"); return; } @@ -842,7 +820,7 @@ LOG(10, "Anchor matches; so do not force slow sync"); } else { LOG(10, "Anchor does not match; so force slow sync"); - osync_objtype_sink_set_slowsync(db->pOSyncObjTypeSink, TRUE); + osync_context_report_slowsync(pOSyncContext); } LOG(10, "Initializing Mozilla"); @@ -888,14 +866,9 @@ { LOG_ENTRY(10, "(%p, %p, %p, %p)", pOSyncObjTypeSink, pOSyncPluginInfo, pOSyncContext, data); - OSyncMozillaEnv *env = (OSyncMozillaEnv *)data; OSyncMozillaDatabase *db = (OSyncMozillaDatabase*) data; + OSyncMozillaEnv *env = db->pOSyncMozillaEnv; - if (db->pOSyncHashTable) { - osync_hashtable_unref(db->pOSyncHashTable); - db->pOSyncHashTable = NULL; - } - LOG(10, "Finalizing Thunderbird"); gboolean f; char *szError=NULL; @@ -958,8 +931,6 @@ OSyncMozillaDatabase *db = (OSyncMozillaDatabase*) o->data; if (db->pOSyncObjTypeSink) { const char *szSinkName = osync_objtype_sink_get_name(db->pOSyncObjTypeSink); - unsigned int nObjTypes = osync_objtype_sink_num_objformat_sinks(db->pOSyncObjTypeSink); - LOG(10, "Marking sink [%s] with [%d] object formats as available", szSinkName, nObjTypes); osync_objtype_sink_set_available(db->pOSyncObjTypeSink, TRUE); } } @@ -1021,7 +992,6 @@ OSyncMozillaDatabase *pOSyncMozillaDatabase; - if (pOSyncMozillaEnv->mozillaConfig.szAddressbookFile) { LOG(10, "Creating OSyncMozillaDatabase for Thunderbird addressbook"); pOSyncMozillaDatabase=(OSyncMozillaDatabase*)osync_try_malloc0(sizeof(OSyncMozillaDatabase), ppOSyncError); @@ -1090,25 +1060,17 @@ osync_objtype_sink_set_batchcommit_timeout(sink, 5*60); // 4 minutes osync_objtype_sink_set_committedall_timeout(sink, 5*60); // 4 minutes osync_objtype_sink_set_syncdone_timeout(sink, 5*60); // 4 minutes - osync_objtype_sink_set_write_timeout(sink, 5*60); // 4 minutes osync_objtype_sink_set_read_timeout(sink, 5*60); // 4 minutes db->pOSyncObjTypeSink = sink; - - /* All sinks have the same functions of course */ - OSyncObjTypeSinkFunctions functions; - memset(&functions, 0, sizeof(functions)); - functions.connect = mozilla_sync_connect; - functions.disconnect = mozilla_sync_disconnect; - functions.get_changes = mozilla_sync_get_changes; - functions.sync_done = mozilla_sync_done; - functions.commit = mozilla_sync_commit_change; - //functions.read = ??? - //functions.write = ??? - - /* We pass the OSyncMozillaDatabase object to the sink, so we dont have to look it up - * again once the functions are called */ - osync_objtype_sink_set_functions(sink, functions, db); + + osync_objtype_sink_set_connect_func(sink, mozilla_sync_connect); + osync_objtype_sink_set_get_changes_func(sink, mozilla_sync_get_changes); + osync_objtype_sink_set_commit_func(sink, mozilla_sync_commit_change); + osync_objtype_sink_set_sync_done_func(sink, mozilla_sync_done); + + osync_objtype_sink_set_userdata(sink, db); + } OSyncCapabilities *pCapabilities = osync_capabilities_new(ppOSyncError); Modified: plugins/mozilla-sync/trunk/src/mozilla-sync.h ============================================================================== --- plugins/mozilla-sync/trunk/src/mozilla-sync.h Mon Mar 30 22:23:58 2009 (r5473) +++ plugins/mozilla-sync/trunk/src/mozilla-sync.h Mon Mar 30 22:26:32 2009 (r5474) @@ -52,7 +52,6 @@ const char *szAnchorValue; const char *szObjtype; const char *szObjformat; - OSyncHashTable *pOSyncHashTable; OSyncObjTypeSink *pOSyncObjTypeSink; OSyncMozillaEnv *pOSyncMozillaEnv; // TODO: This sould really be a union... |