[Buoh-dev] Parche para evitar crash



El jue, 04-08-2005 a las 18:07 +0200, Esteban S?nchez escribi?:
> Este parche soluciona un crash en el buoh. El crash ocurre el 100% de
> las veces que se hace lo siguiente:
> 
> 1) Abrir el buoh
> 2) Pinchar en un comic
> 3) Cerrar el buoh:
>  a) Antes de que comience a cargar nada
>  b) Mientras va apareciendo el comic
> 4) CRASH!

cierto, esta es una de las situaciones que no hab?a tenido en cuenta :-P

> 
> La soluci?n es poco ortodoxa, pero parece que funciona. 
> 
> 
> ?Podeis comprobarlo antes de que haga commit? Por supuesto, cualquier
> sugerencia es bien admitida :)

Te comento:

        if (loader->thread_mutex) {
+               if (!g_mutex_trylock (loader->thread_mutex)) {
+                        g_mutex_unlock (loader->thread_mutex);
+                } else {
+                       g_mutex_unlock (loader->thread_mutex);
+               }
                g_mutex_free (loader->thread_mutex);
                loader->thread_mutex = NULL;
        }

El thread_mutex tiene como ?nico objetivo evitar el que pueda haber mas
de un hilo al mismo tiempo. Efectivamente, si tratas de coger el lock y
lo tiene otro hilo es porque no ha terminado. g_mutex_trylock devuelve
FALSE si el lock lo tiene otro hilo, en ese caso estas quitando tu el
lock, en caso contrario devuelve TRUE y libera el lock y despu?s lo
vuelves a liberar tu. Si te fijas las dos ramas del if son exactamente
iguales!!! No parece muy l?gico. 

Creo que hay otra soluci?n un poco mas f?cil de entender. El objeto
loader tiene un campo status que indica en cada momento el estado del
hilo. Si al llegar al finalize hay un hilo corriendo la variable status
estar? a RUNNING o a STOPPING. En el primer caso debes mandar para al
proceso y esperar a que termine; en el segundo caso tan solo tienes que
esperar a que termine, ya que est? parando. 

Creo que est? soluci?n es un poco mas comprensible.

> Gracias

Salu2
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Carlos Garcia Campos a.k.a. KaL
   elkalmail yahoo es
   carlosgc gnome org
   http://carlosgc.linups.org
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=             
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://forge.novell.com/pipermail/buoh-dev/attachments/20050804/d3e6b8e3/attachment.pgp


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