[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [DDL-ML] Broken pipe beim neuen erddcd



Torsten Vogt wrote:

> Das selbe(!) wie bei "SET POWER OFF". Vgl. dazu den Code in der Datei
> srcp-yacc.y

Hatte ich erwartet, musste aber bei der Syntax der y-Dateien a bisserl
raten.

> Hmmmm, eine Idee hab ich noch: Er schrieb, dass er ein altes Linux mit
> einem 2.0.x-Kernel verwendet. Es kann natuerlich sein, dass die Thread-
> Library fehlerhaft ist und ein pthread_cancel() eines Threads den
> ganzen Prozess ins Nirwana befoerdert. AFAIR wiess die anfangs von mir
> verwendete Thread-Lib diesen Fehler auf (lang ist's her).
> Ich empfehle ein Update des Betriebssystems.

Ein potentielle verwundbare Stelle habe gesehen: In
cancel_refresh_cycle() wird auf die Schnittstelle zugegriffen während
der Refresh-Thread noch läuft.
Mein Vorschlag:

void cancel_refresh_cycle() {
   /* store thread return value here */
   void* pThreadReturn;
   /* send cancel to refresh cycle */
   pthread_cancel(ptid);
   /* wait until the refresh cycle has terminated */
   pthread_join(ptid,&pThreadReturn);
   /* set interface lines to the off state */
   tcflush(COM_DEVICE, TCOFLUSH);
   tcflow(COM_DEVICE, TCOOFF);
   set_SerialLine(SL_DTR,OFF);
   /* clear thread struct */ 
   ptid=(pthread_t)NULL;
}
 
Hier (mit Kernel 2.2.14 auf SuSE 6.4,) laufen beide Versionen ohne
Crash.
Libraries:
	libpthread.so.0 => /lib/libpthread.so.0 (0x4001a000)
	libc.so.6 => /lib/libc.so.6 (0x4002d000)
	/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Mfg
osc

-- 
email: olaf.schlachter@gmx.de	web: http://home.allgaeu.org/oschlach
location: 87435 Kempten 	country: Germany