Croydon just sent me a patch (he's not on the list) that partly fixes the raki crashes. 1. the deletion in raki appears too early, the object is still being accessed after shutdown() 2. the other hunks fix the problem, that a uninitialized object is being accessed, because the object wasn't passed to the other thread
Unfortunately I have no time to test, but the patch looks clean. However it doesn't fix all problems: after quitting raki one can't start it again without a synce-serial-* cycle Please test ---------- Weitergeleitete Nachricht ---------- Subject: Synce Raki Patch-file Date: Montag, 16. Januar 2006 18:11 From: Croydon <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Hallo lilalinux, hier das Patch file. Als Basis für die Änderungen diente mir die synce-kde-0.8.1.1.tar.gz da das CVS von Sourceforge nicht funktioniert hatte. Sollte aber denke ich das gleiche drin sein zumindest hatte ich den Eindruck beim Vergleichen. Das Patchfile bezieht sich nur auf den Ordner raki also da drin am besten dann patch -p0 < patch.diff lg croydon ------------------------------------------------------- -- e-Trolley Sayegh & John, Nabil Sayegh Tel.: 0700 etrolley /// 0700 38765539 Fax.: +49 69 8299381-8 PGP : www.e-trolley.de
diff -uriwbB orig/pda.cpp ./pda.cpp --- orig/pda.cpp 2006-01-15 21:23:08.000000000 +0100 +++ ./pda.cpp 2006-01-16 10:01:58.675409320 +0100 @@ -641,7 +641,7 @@ partnerName = "Guest"; partnerId = 0; } else { - postThreadEvent( &PDA::synchronizationTasks, 0, noBlock ); + postThreadEvent( &PDA::synchronizationTasks, this, noBlock ); associatedMenu->setItemEnabled( syncItem, true ); partnerOk = true; partnerName = partner.name; @@ -676,20 +676,21 @@ } -bool PDA::synchronizationTasks( void * ) +bool PDA::synchronizationTasks( void * data) { RRA_SyncMgrType * objectType; QDateTime lastSynchronized; bool ret = true; + PDA *parent = (PDA*) data; if ( !typesRead ) { typesRead = true; QMap<int, RRA_SyncMgrType *> types; - if ( getSynchronizationTypes( &types ) ) { + if ( parent->getSynchronizationTypes( &types ) ) { QMapIterator<int, RRA_SyncMgrType *> it; for ( it = types.begin() ; it != types.end(); ++it ) { objectType = *it; - configDialog->addSyncTask( objectType, partnerId ); + parent->configDialog->addSyncTask( objectType, partnerId ); } } else { ret = false; diff -uriwbB orig/raki.cpp ./raki.cpp --- orig/raki.cpp 2006-01-15 21:23:08.000000000 +0100 +++ ./raki.cpp 2006-01-16 10:20:32.810035112 +0100 @@ -466,5 +466,5 @@ void Raki::shutDown() { initialized = false; - delete this; + //delete this; } diff -uriwbB orig/syncdialogimpl.cpp ./syncdialogimpl.cpp --- orig/syncdialogimpl.cpp 2006-01-15 21:23:08.000000000 +0100 +++ ./syncdialogimpl.cpp 2006-01-16 10:12:54.434718752 +0100 @@ -108,9 +108,10 @@ } -void *SyncDialogImpl::finishedSynchronization() +void *SyncDialogImpl::finishedSynchronization(void * data) { - buttonOk->setEnabled(true); + SyncDialogImpl *parent = (SyncDialogImpl *) data; + parent->buttonOk->setEnabled(true); if (this->stopRequested()) { SyncDialog::reject(); @@ -184,5 +185,5 @@ } } - postThreadEvent(&SyncDialogImpl::finishedSynchronization, NULL, block); + postThreadEvent(&SyncDialogImpl::finishedSynchronization, this, block); } diff -uriwbB orig/syncdialogimpl.h ./syncdialogimpl.h --- orig/syncdialogimpl.h 2006-01-15 21:23:08.000000000 +0100 +++ ./syncdialogimpl.h 2006-01-16 10:04:04.008355816 +0100 @@ -64,7 +64,7 @@ Rra *rra; QString pdaName; QPtrList<SyncTaskListItem> syncItems; - void *finishedSynchronization(); + void *finishedSynchronization(void * data); void *preSync(void *v_item); void *postSync(void *v_item); };