cosa rara en g_grlib.c

Started by DCelso, January 17, 2011, 10:11:53 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

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?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya esta subida la correccion, gracias.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

¿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
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

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
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

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.

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

mmm... me suena raro, si eso pasara deberia cascar siempre... tiene que existir otro control por otra parte o una asignacion default...

a ver.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#8
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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

#9
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
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/