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);
 };

Reply via email to