Deallocate (CPI-C)

L’appel de désallouer (nom de fonction cmdeal) libère une conversation entre deux programmes.

Syntaxe

  
CM_ENTRY Deallocate(   
  unsigned char FAR *conversation_ID,    
  CM_INT32 FAR *return_code              
);  

Paramètres

conversation_ID
Paramètre fourni. Spécifie l’identificateur de la conversation. La valeur de ce paramètre a été retournée par Initialize_Conversation ou Accept_Conversation.

return_code
Code retourné par cet appel. Les codes de retour valides sont répertoriés plus loin dans cette rubrique.

Codes de retour

CM_OK
Code de retour principal ; l’appel a été exécuté avec succès ; la conversation est libérée.

CM_OPERATION_NOT_ACCEPTED
Code de retour principal ; une opération précédente sur cette conversation est incomplète.

CM_OPERATION_INCOMPLETE
Code de retour principal ; l’opération n’est pas terminée (le mode de traitement n’est pas bloquant uniquement) et est toujours en cours. Le programme peut émettre des Wait_For_Conversation pour attendre la fin de l’opération, ou Cancel_Conversation d’annuler l’opération et la conversation. Si Specify_Windows_Handle a été appelé, l’application doit attendre la notification d’un message Microsoft® Windows® et ne pas appeler Wait_For_Conversation.

CM_PROGRAM_PARAMETER_CHECK
Code de retour principal ; la valeur spécifiée par conversation_ID n’est pas valide.

CM_PROGRAM_STATE_CHECK
Code de retour principal ; les erreurs d’état suivantes peuvent se produire lorsque le type de désallocation indique une allocation normale (CM_DEALLOCATE_SYNC_LEVEL, CM_DEALLOCATE_FLUSH, CM_DEALLOCATE_CONFIRM) :

  • La conversation n’est pas à l’état SEND ou SEND_PENDING.

  • Pour une conversation de base, la conversation est à l’état SEND, mais le programme n’a pas terminé l’envoi d’un enregistrement logique.

    Les codes de retour suivants peuvent être retournés lorsque le deallocate_type est défini sur CM_DEALLOCATE_CONFIRM ou sur CM_DEALLOCATE_SYNC_LEVEL et que le niveau de synchronisation des conversations est défini sur CM_CONFIRM.

    CM_PRODUCT_SPECIFIC_ERROR
    Code de retour principal ; une erreur spécifique au produit s’est produite et a été enregistrée dans le journal des erreurs des produits.

    CM_CONVERSATION_TYPE_MISMATCH
    Code de retour principal ; l’unité logique partenaire (LU) ou le programme ne prend pas en charge le type de conversation (de base ou mappé) spécifié dans la demande d’allocation.

    CM_PIP_NOT_SPECIFIED_CORRECTLY
    Code de retour principal ; la demande d’allocation a été rejetée par un programme de transaction (TP) non CPI-C LU 6.2. Le programme partenaire nécessite une ou plusieurs variables de données PIP, qui ne sont pas prises en charge par CPI-C.

    CM_SECURITY_NOT_VALID
    Code de retour principal ; l’identificateur utilisateur ou le mot de passe spécifié dans la demande d’allocation n’a pas été accepté par l’unité lu partenaire.

    CM_SYNC LEVEL_NOT_SUPPORTED_PGM
    Code de retour principal ; le programme partenaire ne prend pas en charge le niveau de synchronisation spécifié dans la demande d’allocation.

    CM_TPN_NOT_RECOGNIZED
    Code de retour principal ; l’unité lu partenaire ne reconnaît pas le nom du programme spécifié dans la demande d’allocation.

    CM_TP_NOT_AVAILABLE_NO_RETRY
    Code de retour principal ; l’unité lu partenaire ne peut pas démarrer le programme spécifié dans la demande d’allocation en raison d’une condition permanente. La raison de l’erreur peut être consignée sur le nœud distant. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.

    CM_TP_NOT_AVAILABLE_RETRY
    Code de retour principal ; l’unité lu partenaire ne peut pas démarrer le programme spécifié dans la demande d’allocation en raison d’une condition temporaire. La raison de l’erreur peut être consignée sur le nœud distant. Réessayez l’allocation.

    CM_PROGRAM_ERROR_PURGING
    Code de retour principal ; l’un des événements suivants s’est produit :

  • Dans l’état RECEIVE ou CONFIRM, le programme partenaire a émis Send_Error. Les données envoyées mais pas encore reçues sont purgées.

  • Dans SEND_PENDING état avec le sens de l’erreur défini sur CM_RECEIVE_ERROR, le programme partenaire a émis Send_Error. Les données n’ont pas été purgées.

    CM_RESOURCE_FAILURE_NO_RETRY
    Code de retour principal ; l’un des événements suivants s’est produit :

  • La conversation a été interrompue prématurément en raison d’une condition permanente. Ne réessayez pas tant que l’erreur n’a pas été corrigée.

  • Le programme partenaire n’a pas libéré la conversation avant de se terminer normalement.

    CM_RESOURCE_FAILURE_RETRY
    Code de retour principal ; la conversation a été interrompue prématurément en raison d’une condition temporaire, telle qu’une défaillance du modem. Réessayez la conversation.

    CM_DEALLOCATED_ABEND
    Code de retour principal ; la conversation a été libérée pour l’une des raisons suivantes :

  • Le programme distant a émis Deallocate avec le paramètre de type défini sur CM_DEALLOCATE_ABEND, ou l’unité lu distante l’a fait en raison d’une condition de fin anormale du programme distant. Si la conversation pour le programme distant était à l’état RECEIVE lors de l’émission de l’appel, les informations envoyées par le programme local et non encore reçues par le programme distant sont purgées.

  • Le TP distant s’est terminé normalement, mais n’a pas libéré la conversation avant de se terminer. Les services de nœud au niveau de l’unité lu distante ont libéré la conversation au nom du TP distant.

    CM_DEALLOCATED_ABEND_SVC
    Code de retour principal ; la conversation a été libérée pour l’une des raisons suivantes :

  • Le programme partenaire a émis La libération avec le paramètre de type défini sur ABEND_SVC.

  • Le programme partenaire n’a pas libéré la conversation avant de se terminer.

    Si la conversation est à l’état RECEIVE pour le programme partenaire lorsque cet appel est émis par le programme local, les données envoyées par le programme local et non encore reçues par le programme partenaire sont purgées.

    CM_DEALLOCATED_ABEND_TIMER
    Code de retour principal ; la conversation a été libérée, car le programme partenaire a émis Deallocate avec le paramètre de type défini sur ABEND_TIMER. Si la conversation est à l’état RECEIVE pour le programme partenaire lorsque cet appel est émis par le programme local, les données envoyées par le programme local et non encore reçues par le programme partenaire sont purgées.

    CM_SVC_ERROR_PURGING
    Code de retour principal ; dans l’état SEND, le programme partenaire ou l’unité lu partenaire a émis Send_Error avec le paramètre de type défini sur SVC. Les données envoyées au programme partenaire peuvent avoir été purgées.

    Changements d’état

    En fonction de la valeur du paramètre de type de désallouer les conversations (défini par Set_Deallocate_Type), la conversation peut se trouver dans l’un des états indiqués dans le tableau suivant lorsque le programme émet des problèmes de désallouer :

Type de désallocation État autorisé
CM_DEALLOCATE_FLUSH ENVOYER ou SEND_PENDING
CM_DEALLOCATE_CONFIRM ENVOYER ou SEND_PENDING
CM_DEALLOCATE_SYNC_LEVEL ENVOYER ou SEND_PENDING
CM_DEALLOCATE_ABEND N’importe quel, sauf RÉINITIALISER

Les changements d’état, résumés dans le tableau suivant, sont basés sur la valeur du paramètre return_code .

return_code Nouvel état
CM_OK RESET
CM_PROGRAM_ERROR_PURGING RECEIVE
CM_SVC_ERROR_PURGING RECEIVE
CM_CONVERSATION_TYPE_MISMATCH RESET
CM_PIP_NOT_SPECIFIED_CORRECTLY RESET
CM_SECURITY_NOT_VALID RESET
CM_SYNC_LEVEL_NOT_SUPPORTED_PGM RESET
CM_TPN_NOT_RECOGNIZED RESET
CM_TP_NOT_AVAILABLE_NO_RETRY RESET
CM_TP_NOT_AVAILABLE_RETRY RESET
CM_RESOURCE_FAILURE_NO_RETRY RESET
CM_RESOURCE_FAILURE_RETRY RESET
CM_DEALLOCATED_ABEND RESET
CM_DEALLOCATED_ABEND_SVC RESET
CM_DEALLOCATED_ABEND_TIMER RESET
Tous les autres Aucun changement

Remarques

Avant de déallouer la conversation, cet appel effectue l’équivalent de l’appel Flush ou Confirmed , en fonction du niveau de synchronisation de conversation actuel et du type de désallocation. Le type de désallocation est défini par Set_Deallocate_Type.

Le programme partenaire reçoit la notification de désallocation via l’un des paramètres suivants :

  • status_received est CM_CONFIRM_DEALLOC_RECEIVED

  • return_code est CM_DEALLOCATED_NORMAL

  • return_code est CM_DEALLOCATED_ABEND

    Une fois cet appel exécuté avec succès, le conversation_ID n’est plus valide.

    Pour une conversation de base, si le type de désallocation des conversations est défini sur CM_DEALLOCATE_ABEND et que la longueur des données du journal est supérieure à zéro, l’unité logique locale écrit les données de journal (spécifiées par Set_Log_Data) dans le journal des erreurs local et dans l’unité logique partenaire.

    Une fois la désallocation exécutée, la longueur des données du journal est définie sur zéro et les données de journal sont définies sur null.