Kirjoittaja Aihe: f-spot ja s3savage toimimaton yhdistelmä...  (Luettu 1228 kertaa)

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
f-spot ja s3savage toimimaton yhdistelmä...
« : 31.05.09 - klo:22.02 »
Asia ei oikeastaan kuulu tänne ohjemointipuolelle, mutta ratkaisun löytäminen kyllä.

Kyseessä siis on IBM T23-kannettava, jossa s3 savage-näytönohjain. Yritin käyttää siitä F-Spot -ohjelmaa, mutta se kaatui heti alkuunsa. Googletus toikin sitten seuraavan linkin:

http://bugzilla.gnome.org/show_bug.cgi?id=458688

Eli glXDestroyContext() -funktion kutsuminen aiheuttaa tuon kaatumisen. Asensin viestiketjusta löytyneen patchin, joka estää tuon funktion ajamisen. Nyt seuraakin kysymys, että mitä sivuvaikutuksia on odotettavissa tuon seurauksena? Jääkö jotain resursseja vapauttamatta huomattavastikin ja vapautuuko muisti viimeistään kun f-spot suljetaan?

Vika siis on ollut jo 6.10-versiossa ja edelleen bugi on olemassa. Asia taitaa olla aika hankala, mutta jos olisi jotain muita vinkkejä ongelman kierämiseksi, niin olisin kiitollinen. Tietysti olisi halu korjata tuo bugi oikeasti, mutta taidot eivät kyllä riitä ihan siihen.

Vois tietty laittaa jokaisen rivin jälkeen jotain debugviestiä päätteelle ja katsoa, mihin kaatuu...

DestroyContext(Display *dpy, GLXContext gc)
{
    xGLXDestroyContextReq *req;
    GLXContextID xid;
    CARD8 opcode;
    GLboolean imported;

    opcode = __glXSetupForCommand(dpy);
    if (!opcode || !gc) {
   return;
    }

    __glXLock();
    xid = gc->xid;
    imported = gc->imported;
    gc->xid = None;

#ifdef GLX_DIRECT_RENDERING
    /* Destroy the direct rendering context */
    if (gc->isDirect) {
   if (gc->driContext.private) {
       (*gc->driContext.destroyContext)(dpy, gc->screen,
                    gc->driContext.private);
       gc->driContext.private = NULL;
   }
    }
#endif

    if (gc->currentDpy) {
   /* Have to free later cuz it's in use now */
   __glXUnlock();
    } else {
   /* Destroy the handle if not current to anybody */
   __glXUnlock();
   __glXFreeContext(gc);
    }

    if (!imported) {
   /*
   ** This dpy also created the server side part of the context.
   ** Send the glXDestroyContext request.
   */
   LockDisplay(dpy);
   GetReq(GLXDestroyContext,req);
   req->reqType = opcode;
   req->glxCode = X_GLXDestroyContext;
   req->context = xid;
   UnlockDisplay(dpy);
   SyncHandle();
    }
}

PUBLIC void glXDestroyContext(Display *dpy, GLXContext gc)
{
    DestroyContext(dpy, gc);
}