Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: DCelso on January 17, 2011, 10:11:53 PM

Title: cosa rara en g_grlib.c
Post by: DCelso on January 17, 2011, 10:11:53 PM
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?
Title: Re: cosa rara en g_grlib.c
Post by: SplinterGU on January 17, 2011, 10:48:34 PM
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.
Title: Re: cosa rara en g_grlib.c
Post by: SplinterGU on January 17, 2011, 11:03:13 PM
ya esta subida la correccion, gracias.
Title: Re: cosa rara en g_grlib.c
Post by: DCelso on January 17, 2011, 11:08:31 PM
por nada.
Title: Re: cosa rara en g_grlib.c
Post by: Drumpi on January 18, 2011, 12:35:26 AM
¿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
Title: Re: cosa rara en g_grlib.c
Post by: DCelso on January 18, 2011, 01:22:58 AM
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
Title: Re: cosa rara en g_grlib.c
Post by: DCelso on January 18, 2011, 03:14:49 AM
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.

Title: Re: cosa rara en g_grlib.c
Post by: SplinterGU on January 18, 2011, 03:24:50 AM
mmm... me suena raro, si eso pasara deberia cascar siempre... tiene que existir otro control por otra parte o una asignacion default...

a ver.
Title: Re: cosa rara en g_grlib.c
Post by: 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?


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.
Title: Re: cosa rara en g_grlib.c
Post by: DCelso on January 18, 2011, 03:32:00 AM
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