aMSN – *** glibc detected *** double free or corruption


¿Nunca te sucedió que se cierra aMSN de repente y como si nada hubiera pasado?

Bueno, en realidad algo es que pasó. Y normalmente ese tipo de problemas son del interprete (o sus bibliotecas) o sea, son problemas de los binarios que manejan la cosa y no del propio código de aMSN el cual está claro que está programado en TCL.

Pues, la forma de averiguarlo es ejecutándolo desde una cónsola donde podremos ver los mensajes que el programa arroja. Lo cual no era posible ejecutado directamente desde el menú de la interfáz gráfica ya que simplemente se nos cerraba y ni nos enterábamos de lo que el programa nos estaba diciendo.

Bueno, yo recibí este mensaje:

*** glibc detected *** double free or corruption (!prev): 0x09584d98 ***
/usr/bin/amsn: line 2: 18902 Abortado ./amsn
Eso indicaba claramente un problema de liberación de memoria. Alguna biblioteca, o el mismo wish, estaban intentando liberar la memoria dos veces y está claro que eso no se puede hacer.

Resulta que tenía referencia de este error en el pasado. O sea, ya me había pasado antes y lo había solucionado. Igualmente sin tomar en cuenta la referencia, wish (el intérprete de TCL que usa aMSN) no podía estar fallando ya que antes de utilizar esta nueva versión de aMSN (la 0.97.2) tenía funcionando perfectamente otra versión. Así que el problema se me estaba limitando al propio aMSN (o algo que trajera consigo).

Bien, recordando la referencia anterior, era problema de una biblioteca de imágenes. Ajá, sí, entonces como también recordé que dejé escrito un comentario en el código fuente que había modificado en esa biblioteca de imágenes con anterioridad, decidí buscar el comentario y… lo hallé! Resulta que era referido a la biblioteca de gráficos png en “TkCximage”. El archivo más precisamente es utils/TkCximage/src/CxImage/ximapng.cpp. Hay una línea cerca de la numero 67 (si no es esa misma) que libera un arreglo (row_pointers). Ese arreglo aparentemente ya fue liberado en otra ocación en otra parte del código.

Si bien no me puse a estudiar a fondo el código, al menos encontré una forma práctica de solucionarlo y simplemente fue comentando dicha línea. O sea, la línea quedaría algo así como:

// delete [] row_pointers;

La comenté para no olvidarme dónde estaba el problema en sí, pero si realmente esa línea está demás lo correcto sería borrarla. Pero antes de tomar ese tipo de desiciones hay que estudiar bien el código. Se lo encargo a alguien más, ya que a mi así me funcionó durante más de un año y nunca tuve problemas referidos a falta de memoria o similar.
Bueno, una vez que hayan comentado esa línea no se olviden de volver a compilar los fuentes. Para eso hay que escribir “make” en el directorio raíz de amsn.

Eso es todo, y espero que les haya sido de ayuda.

Hasta otra.

  1. #1 por tella el agosto 14, 2008 - 5:41 pm

    Estimado Anyeos, quiero comentarte que desde agosto amsn dejó de funcionar para algunos usuarios (de distintos países) entre los que me incluyo, la solución era que habia que actualizarlo a una nueva versión, 0.97.2, quienes lo hicieron no tuvieron problema, pudieron conectarse nuevamente por amsn. Eso fue lo que me enteré en algunos foro, porque amsn solo escribia el mensaje “servidor desconocido”.
    Atentamente.

  2. #2 por Anyeos el agosto 14, 2008 - 11:51 pm

    Sí, exacto, por eso cuando actualicé a la 0.97.2 se me cerraba de repente. Era un problema en ese archivo que en la versión anterior de aMSN tenía solucionado. Cuando coloqué la nueva no estaba solucionado. Al menos con mi glibc pasa eso, no sé si con las nuevas glibc sucede lo mismo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: