Jason White, le Sun 17 Jun 2012 11:38:47 +1000, a écrit : > Samuel Thibault <samuel.thiba...@ens-lyon.org> wrote: > > > Mmm, indeed, that could happen. Could you test the attached patch? > > With the patch applied, we still segfault. Let me know how I can best help.
Could you try this one? Samuel
Index: Programs/brlapi_server.c =================================================================== --- Programs/brlapi_server.c (révision 6570) +++ Programs/brlapi_server.c (copie de travail) @@ -331,7 +331,11 @@ /* Returns !0 if driver can return specific keycodes, 0 if not. */ static int isKeyCapable(const BrailleDriver *brl) { - return (((brl->readKey!=NULL) && (brl->keyToCommand!=NULL)) || (disp && disp->keyNameTables!=NULL)); + int ret; + pthread_mutex_lock(&driverMutex); + ret = ((brl->readKey!=NULL) && (brl->keyToCommand!=NULL)) || (disp && disp->keyNameTables!=NULL); + pthread_mutex_unlock(&driverMutex); + return ret; } /* Function : suspendDriver */ @@ -2450,7 +2454,6 @@ goto out; } } - pthread_mutex_unlock(&driverMutex); newCursorShape = getCursorDots(); if (newCursorShape!=cursorShape) { cursorShape = newCursorShape; @@ -2459,13 +2462,12 @@ unsigned char *oldbuf = disp->buffer, buf[displaySize]; disp->buffer = buf; getDots(&c->brailleWindow, buf); - pthread_mutex_lock(&driverMutex); brl->cursor = c->brailleWindow.cursor-1; ok = trueBraille->writeWindow(brl, c->brailleWindow.text); drain = 1; - pthread_mutex_unlock(&driverMutex); disp->buffer = oldbuf; } + pthread_mutex_unlock(&driverMutex); pthread_mutex_unlock(&c->brlMutex); } else { /* no RAW, no connection filling tty, hence suspend if needed */ @@ -2558,8 +2560,10 @@ ApiBraille.readPacket = NULL; ApiBraille.writePacket = NULL; braille=&ApiBraille; + pthread_mutex_lock(&driverMutex); brlResize(brl); driverConstructed=1; + pthread_mutex_unlock(&driverMutex); pthread_mutex_lock(&connectionsMutex); broadcastKey(&ttys, BRLAPI_KEY_TYPE_CMD|BRLAPI_KEY_CMD_NOOP, BRL_COMMANDS); pthread_mutex_unlock(&connectionsMutex); @@ -2582,8 +2586,8 @@ pthread_mutex_lock(&driverMutex); if (!coreActive && driverConstructed) suspendDriver(disp); + disp = NULL; pthread_mutex_unlock(&driverMutex); - disp = NULL; } /* Function : api_identify */
_______________________________________________ This message was sent via the BRLTTY mailing list. To post a message, send an e-mail to: BRLTTY@mielke.cc For general information, go to: http://mielke.cc/mailman/listinfo/brltty