IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[OCILIB] OCI_ConnectionFree avant OCI_StatementFree


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut [OCILIB] OCI_ConnectionFree avant OCI_StatementFree
    Bonsoir,

    En phase de tests sur mes devs, je suis tombé sur un hang lorsqu'un OCI_ConnectionFree est réalisé avant OCI_StatementFree (Le statement étant lié à la connection).

    Je tiens à préciser que je pense que le fait de fermer la connection avant de libérer le statement est bien entendu hors de toute logique mais...

    Fly.

    Ce test a été réalisé sur la version 3.4.0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    	OCI_Connection *cn;
    	OCI_Statement  *st;
    	OCI_Resultset *rs;
     
    	if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
    		return EXIT_FAILURE;
     
    	cn = OCI_ConnectionCreate("XX", "X", "X", OCI_SESSION_DEFAULT);
    	st = OCI_StatementCreate(cn);
     
    	OCI_Prepare(st, "select 'toto' from dual");
    	OCI_Execute(st);
     
    	rs = OCI_GetResultset(st);
     
    	while (OCI_FetchNext(rs))
    	{
    		printf("La tête à %s\n",OCI_GetString(rs,1));
    	}
    	OCI_ConnectionFree(cn);
    	OCI_StatementFree(st);
     
    	OCI_Cleanup();

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Quand OCI_ConnectionFree() est appelé, tous les objets OCI_Statement crées pour la connexion en question sont libérés..

    OCI_StatementFree(), dans ce cas va vouloir accéder à un pointeur invalide...

    C'est comme faire deux appels d'affilé à free()... comportement indéterminé !

    Ou est ton problème ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut
    Bonjour,

    Il ne s'agit pas vraiment d'un problème . Je développe une série d'apis fournies à des programmeurs. Une des apis permet de se connecter, certaines permettent de gérer les statements sur une connection.

    Le souci est que je ne vais pas forcément être derrière leurs épaules pour vérifier qu'ils codent comme il le faut.

    Je pensais que la fonction OCI_StatementFree allait renvoyer une erreur du type 'invalide handle' ou autre.

    Fly.

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par cobfly Voir le message
    Bonjour,

    Je pensais que la fonction OCI_StatementFree allait renvoyer une erreur du type 'invalide handle' ou autre.

    Fly.
    Si NULL est passé à OCI_StatementFree(), une erreur est renvoyée.

    Mais si la valeur n'est pas nulle, comment faire ? Tester la validité d'un pointeur qui pointe sur une zonée mémoire déja libérée, de maniére portable et sans overhead, est quasi impossible...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut
    Bonjour,

    Bien compris, il me reste à ajouter un petit booléen de ma liste de statement

    Merci.
    Fly

Discussions similaires

  1. [OCILIB] Informations disponibles avant fetch
    Par cobfly dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 10/02/2011, 19h27
  2. À lire OBLIGATOIREMENT avant de poster sur ce forum
    Par ok.Idriss dans le forum Débats sur le développement - Le Best Of
    Réponses: 2
    Dernier message: 24/09/2006, 23h21
  3. A lire impérativement avant de poster un message
    Par ok.Idriss dans le forum Demandes
    Réponses: 0
    Dernier message: 01/05/2002, 18h57
  4. IMPORTANT! A lire avant tout chose
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 01/05/2002, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo