actualmente en la línea 97 me da un warnning en rojo "warning: assignment from incompatible pointer type", que creo que peligroso.
Hace esto:
libs = ( GRAPH ** ) realloc( libs, sizeof( GRAPH * ) * libs_allocated );
memset( &libs[ libs_last ], 0, sizeof( GRAPH * ) * 256 );
donde libs es de tipo
static GRLIB ** libs = NULL;
entonces me surge una duda de que puede que falte memoria por realocar ya que GRLIB ocupa más que GRAPH, aunque tratándose de punteros pues puede que no, nose, pero resulta que el port de psp me da problemas de cerrado involuntario por core dump, y estaba intentando encontrar el problema.
¿Que piensas de esta línea, SplinterGU?
evidentemente esta mal, pero no trae problemas porque un puntero mide lo mismo sea puntero a lo que sea.
gracias por la deteccion ahora lo reviso.
ya esta subida la correccion, gracias.
por nada.
¿Tiene eso algo que ver con el error que nos daba de la declaración esa de libvideo?
PD: he llegado bien a casa, no sufras :D
pues si te digo yo que no he sufio nada.. :D, (confio en tus dotes de conductor :D)
No, no tiene nada que ver, creo, parece que simplemente sirve para quitar un warning de compilación, :D
al fin, Drumpi ya no me casca el bgdi monolítico aleatoriamente como nos pasaba aqui en mi casa, ni pega el segmentation fault al salir. Depurando encontré que cascaba en la línea 466 de instance.c, hacía una comprobación
if ( brother ) ){
y dentro cascaba, en
LOCDWORD( r, BIGBRO ) = LOCDWORD( brother, PROCESS_ID ) ;
asi que puse la comprobación de ver si era nula esa asignación y puse esto
if ( brother && LOCDWORD( r, BIGBRO ) ){
y mano de santo. Solucionado el problema aleatorio de segmentation fault que nos daba así por la cara. :D, mañana te paso nueva versión de GP2X para ver si te va el drumpi (digo echo :D)
SplinterGU, he tocado eso por intuición, pero ni idea de lo que hace, ¿puedes verificarnos si este cambio afectaría al core de bennu?
Gracias de antemano.
mmm... me suena raro, si eso pasara deberia cascar siempre... tiene que existir otro control por otra parte o una asignacion default...
a ver.
ahora veo bien el codigo... eso que has puesto no tiene sentido...
LOCDWORD( r, FATHER ) = LOCDWORD( father, PROCESS_ID ) ;
brother = instance_get( LOCDWORD( father, SON ) ) ;
if ( brother )
{
LOCDWORD( r, BIGBRO ) = LOCDWORD( brother, PROCESS_ID ) ;
LOCDWORD( brother, SMALLBRO ) = pid ;
}
...
como podes ver en el codigo la comprobacion de brother se hace un poco mas arriba, de hecho el bloque no se ejecuta si no esta brother... no tiene sentido el cambio que has puesto...
parece que el aleatorio no lo hizo caer en tu prueba...
decime una cosa, en la version psp, como lo compilas, con -O3? o algun otro -O?
EDIT: si te referis a que tocaste el if y le pusiste "&& LOCDWORD( r, BIGBRO )", entonces eso tambien esta mal, porque "LOCDWORD( r, BIGBRO )" es un espacio fijo...
pero...
quizas el problema lo tengas ahora en que los defines LOCDWORD, y demas, son diferentes a si se usan desde una libreria/modulo a que si se usa desde el bgruntime... para la version monolitica, realmente no deberian usarse los fix_ups, y hacerlo estatico, pero... creo que ahi se te va a complicar un poco mas la cosa... quizas tengas que pasar las dlls que no usan los fix_ups (runtime) a que usen el fix_up, y ahi si emplear el sistema que usas en los modulos.
Quote from: SplinterGU on January 18, 2011, 03:29:48 AM
ahora veo bien el codigo... eso que has puesto no tiene sentido...
LOCDWORD( r, FATHER ) = LOCDWORD( father, PROCESS_ID ) ;
brother = instance_get( LOCDWORD( father, SON ) ) ;
if ( brother )
{
LOCDWORD( r, BIGBRO ) = LOCDWORD( brother, PROCESS_ID ) ;
LOCDWORD( brother, SMALLBRO ) = pid ;
}
...
como podes ver en el codigo la comprobacion de brother se hace un poco mas arriba, de hecho el bloque no se ejecuta si no esta brother... no tiene sentido el cambio que has puesto...
parece que el aleatorio no lo hizo caer en tu prueba...
decime una cosa, en la version psp, como lo compilas, con -O3? o algun otro -O?
Pues mi cambio fue este
LOCDWORD( r, FATHER ) = LOCDWORD( father, PROCESS_ID ) ;
brother = instance_get( LOCDWORD( father, SON ) ) ;
<b> if ( brother && LOCDWORD( r, BIGBRO ) )</b>
{correctamente
LOCDWORD( r, BIGBRO ) = LOCDWORD( brother, PROCESS_ID ) ;
LOCDWORD( brother, SMALLBRO ) = pid ;
}
...
y sin él no continua la ejecución del bgdi correctamente en psp ni gp2x :o, sorpendente cuanto más