Forum Programmation.c segfault dans la démo d'ocilib

Posté par . Licence CC by-sa
Tags : aucun
0
15
mar.
2014

Salut,

J'essaie d'exécuter une des démo fournie avec ocilib (qui permet d'accéder à une db Oracle). On voit que la connexion se fait bien, mais l'appli fait un segfault dans la méthode oci_cleanup. J'ai mis un stacktrace pour montrer ça.

Si je fais un code plus compliqué avec des insertions dans une table, les insertions passent mais ça plante à nouveau dans OCI_Cleanup.

Ci-dessous je mets le code de la démo, avec les paramètres de ma connexion. Ensuite le résultat de l'exécution dans gdb avec une stacktrace.

J'utilise la db en version 11g qui est founie dans la machine virtuelle de test configurée par oracle.

Quelqu'un a une idée de ce que ça pourrait être ?

Merci

Voici le code:

#include "ocilib.h"

int main(void)
{
    OCI_Connection *cn;

    if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
        return EXIT_FAILURE;

    cn = OCI_ConnectionCreate("//localhost:1521/orcl", "dbuser", "oracle", OCI_SESSION_DEFAULT);

    printf("Server major    version : %i\n",   OCI_GetServerMajorVersion(cn));
    printf("Server minor    version : %i\n",   OCI_GetServerMinorVersion(cn));
    printf("Server revision version : %i\n\n", OCI_GetServerRevisionVersion(cn));
    printf("Connection      version : %i\n\n", OCI_GetVersionConnection(cn));

    OCI_Cleanup();

    return EXIT_SUCCESS;
}

Voici la sortie, on voit que les requêtes sont bien traitées:

    Server major    version : 11
    Server minor    version : 2
    Server revision version : 0

    Connection      version : 1120

    Program received signal SIGSEGV, Segmentation fault.

Et enfin les messages que j'ai obtenu en faisant tourner l'exécutable dans gdb:

    Reading symbols from /home/oracle/ocilib-3.12.1/demo/conn...(no debugging symbols found)...done.
    (gdb) run
    Starting program: /home/oracle/ocilib-3.12.1/demo/conn 
    [Thread debugging using libthread_db enabled]
    warning: .dynamic section for "/usr/lib/libnuma.so.1" is not at the expected address
    warning: difference appears to be caused by prelink, adjusting expectations
    Server major    version : 11
    Server minor    version : 2
    Server revision version : 0

    Connection      version : 1120


    Program received signal SIGSEGV, Segmentation fault.
    0x01bf3e1e in kpunOps ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    (gdb) bt
    #0  0x01bf3e1e in kpunOps ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    #1  0x01bf5a4a in kpunUnRegister ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    #2  0x01acd622 in OCISubscriptionUnRegister ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    #3  0x00f85276 in kpuqtac ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    #4  0x00fafced in kputac ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    #5  0x00f941a8 in OCISessionEnd ()
       from /home/oracle/app/oracle/product/11.2.0/dbhome_2/lib/libclntsh.so.11.1
    #6  0x00b553c9 in OCI_ConnectionLogOff (con=0xb87398) at connection.c:798
    #7  0x00b563b0 in OCI_ConnectionClose (con=0x80813e8) at connection.c:901
    #8  0x00b6f077 in OCI_ListForEach (list=0x8081378, 
        proc=0xb56380 <OCI_ConnectionClose>) at list.c:252
    #9  0x00b675de in OCI_Cleanup () at library.c:1257
    #10 0x08048719 in main ()
  • # parametre ?

    Posté par . Évalué à 3.

    je vais surement dire une betise, mais toutes tes actions OCI semble prendre un parametre cn
    mais ton OCI_cleanup n'en prend pas lors de l'appel.

    si ca se trouve il faut lui dire ce que tu veux cleaner pour que ca se passe bien.

    • [^] # Re: parametre ?

      Posté par (page perso) . Évalué à 3.

      Apparemment pas. Cf http://orclib.sourceforge.net/doc/html/group__g__init.html#ga639706aa8e9689c7ebffc018fac6d3ae

      OCI_EXPORT boolean OCI_API OCI_Cleanup ( void )

    • [^] # Re: parametre ?

      Posté par . Évalué à 1. Dernière modification le 16/03/14 à 14:27.

      Je pense que Benoît Sibaud a bien répondu. De plus ça fait partie des exemples fournis avec les sources de la lib et je pense qu'ils devraient marcher.

      Ce que j'attends plutôt comme réponse ça serait, soit que quelqu'un a déjà eu le truc et donne ça solution, soit des idées pour diagnostiquer ce qui ne va pas avec l'aide du déboggeur.

      Par exemple je me demandais si la source de l'erreur ne viendrait pas de ces lignes du déboggeur que je ne comprends pas très bien:

      warning: .dynamic section for "/usr/lib/libnuma.so.1" is not at the expected address
      warning: difference appears to be caused by prelink, adjusting expectations
      

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.