MC_DEALLOCATE

Le verbe MC_DEALLOCATE libère une conversation entre deux programmes de transaction (TP).

La structure suivante décrit le bloc de contrôle de verbe (VCB) utilisé par le verbe MC_DEALLOCATE .

Syntaxe

  
struct mc_deallocate {  
    unsigned short   opcode;  
    unsigned char    opext;  
     unsigned char    reserv2;  
    unsigned short   primary_rc;  
    unsigned long    secondary_rc;  
    unsigned char    tp_id[8];  
    unsigned long    conv_id;  
    unsigned char    reserv3;  
    unsigned char    dealloc_type;  
    unsigned char    reserv4[2];  
    unsigned char    reserv5[4];  
    void             (WINAPI *callback)();  
    void             *correlator;  
    unsigned char    reserv6[4];  
};  

Membres

opcode
Paramètre fourni. Spécifie le code d’opération de verbe, AP_M_DEALLOCATE.

opext
Paramètre fourni. Spécifie l’extension de l’opération de verbe, AP_MAPPED_CONVERSATION.

reserv2
Champ réservé.

primary_rc
Paramètre retourné. Spécifie le code de retour principal défini par APPC à l’achèvement du verbe. Les codes de retour valides dépendent du verbe APPC émis. Pour connaître les codes d’erreur valides de ce verbe, consultez Codes de retour.

secondary_rc
Paramètre retourné. Spécifie le code de retour secondaire défini par APPC à l’achèvement du verbe. Les codes de retour valides dépendent du verbe APPC émis. Pour connaître les codes d’erreur valides de ce verbe, consultez Codes de retour.

tp_id
Paramètre fourni. Identifie le TP local. La valeur de ce paramètre a été retournée par TP_STARTED dans le TP appelant ou par RECEIVE_ALLOCATE dans le TP appelé.

conv_id
Paramètre fourni. Identifie la conversation établie entre les deux TPs. La valeur de ce paramètre est retournée par MC_ALLOCATE dans le TP appelant ou par RECEIVE_ALLOCATE dans le TP appelé.

reserv3
Un champ réservé.

dealloc_type
Paramètre fourni. Spécifie comment effectuer la désallocation.

Pour MC_DEALLOCATE, utilisez AP_ABEND pour désallouer la conversation de manière anormale. Si la conversation est à l’état d’envoi lorsque le TP local émet des MC_DEALLOCATE, APPC envoie le contenu de la mémoire tampon d’envoi de l’unité logique locale (lu) au TP partenaire avant de désallouer la conversation. Si la conversation est à l’État RECEIVE ou PENDING_POST, APPC purge toutes les données entrantes avant de désallouer la conversation.

Un TP doit spécifier AP_ABEND lorsqu’il rencontre une erreur empêchant la réussite d’une transaction.

AP_FLUSH envoie le contenu de la mémoire tampon d’envoi du LU local au TP partenaire avant de désallouer la conversation. Cette valeur est autorisée uniquement si la conversation est à l’état d’envoi.

AP_SYNC_LEVEL utilise le niveau de synchronisation de la conversation (établi par MC_ALLOCATE) pour déterminer comment désallouer la conversation. Cette valeur est autorisée uniquement si la conversation est à l’état d’envoi.

Si le niveau de synchronisation de la conversation est AP_NONE, APPC envoie le contenu de la mémoire tampon d’envoi du LU local au TP partenaire avant de désallouer la conversation.

Si le niveau de synchronisation est AP_CONFIRM_SYNC_LEVEL, APPC envoie le contenu de la mémoire tampon d’envoi du LU local et une demande de confirmation au TP partenaire. Lors de la réception de la confirmation du TP partenaire, APPC libère la conversation. Toutefois, si le TP partenaire signale une erreur, la conversation reste allouée.

rappel
Paramètre fourni. Présent uniquement si le bit de AP_EXTD_VCB est défini dans le membre opext indiquant la prise en charge du point de synchronisation. Ce paramètre est l’adresse d’une fonction de rappel fournie par l’utilisateur. Si ce champ a la valeur NULL, aucune notification n’est fournie.

Le prototype de la routine de rappel est le suivant :

void WINAPI callback_proc(  
    struct appc_hdr *vcb,  
    unsigned char tp_id[8],  
    unsigned long conv_id,  
    unsigned short type,  
    void *correlator  
   );  

La procédure de rappel peut prendre n’importe quel nom, étant donné que l’adresse de la procédure est transmise à la DLL APPC. Les paramètres passés à la fonction sont les suivants :

VCB

Pointeur vers le MC_DEALLOCATE bloc de contrôle de verbe qui a provoqué la désallocation de la conversation.

tp_id

Identificateur TP du TP appartenant à la conversation désallouée.

conv_id

Identificateur de conversation de la conversation désallouée.

type

Type du message qui a provoqué l’appel du rappel. Les valeurs possibles sont les suivantes :

AP_DATA_FLOW

Le workflow de données normal sur la session.

AP_UNBIND

La session a été correctement détachée.

AP_FAILURE

La session s’est arrêtée en raison d’une panne.

corrélateur

Cette valeur est la corrélation spécifiée sur le verbe MC_DEALLOCATE .

corrélateur
Paramètre fourni. Présent uniquement si le bit de AP_EXTD_VCB est défini dans le membre opext indiquant la prise en charge de l’API de point de synchronisation. Ce champ de corrélation permet au TP de spécifier une valeur qu’il peut utiliser pour mettre en corrélation un appel à la fonction de rappel avec, par exemple, ses propres structures de données internes. Cette valeur est retournée au TP comme l’un des paramètres de la routine de rappel lorsqu’elle est appelée.

reserv4
Un champ réservé.

Codes de retour

AP_OK
Code de retour principal ; indique que le verbe s’est exécuté correctement.

AP_PARAMETER_CHECK
Code de retour principal ; le verbe n’a pas été exécuté en raison d’une erreur de paramètre.

AP_BAD_CONV_ID

Code de retour secondaire ; la valeur de conv_id ne correspond pas à un identificateur de conversation assigné par APPC.

AP_BAD_TP_ID

Code de retour secondaire ; la valeur de tp_ID ne correspond pas à un identificateur TP assigné par APPC.

AP_DEALLOC_BAD_TYPE

Code de retour secondaire ; le paramètre dealloc_type n’a pas une valeur valide.

AP_STATE_CHECK
Code de retour principal ; le verbe n’a pas été exécuté, car il a été émis dans un état non valide.

AP_DEALLOC_CONFIRM_BAD_STATE

Code de retour secondaire ; la conversation n’était pas à l’état d’envoi et le TP a tenté de vider la mémoire tampon d’envoi et d’envoyer une demande de confirmation. Cette tentative s’est produite parce que la valeur de dealloc_type a été AP_SYNC_LEVEL et que le niveau de synchronisation de la conversation était AP_CONFIRM_SYNC_LEVEL.

AP_DEALLOC_FLUSH_BAD_STATE

Code de retour secondaire ; la conversation n’était pas à l’état d’envoi et le TP a tenté de vider la mémoire tampon d’envoi. En effet, la valeur de dealloc_type était AP_FLUSH, ou bien AP_SYNC_LEVEL avec le niveau de synchronisation de la conversation AP_NONE. Dans les deux cas, la conversation doit présenter l’état SEND.

AP_ALLOCATION_ERROR
Code de retour principal ; APPC n’a pas pu allouer une conversation. L’état de la conversation est défini sur RESET.

Ce code peut être retourné via un verbe émis après MC_ALLOCATE.

AP_ALLOCATION_FAILURE_NO_RETRY

Code de retour secondaire ; la conversation ne peut pas être allouée en raison d’une condition permanente, telle qu’une erreur de configuration ou une erreur de protocole de session. Pour déterminer l’erreur, l’administrateur système doit examiner le fichier journal des erreurs. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.

AP_ALLOCATION_FAILURE_RETRY

Code de retour secondaire ; la conversation n’a pas pu être allouée en raison d’une condition temporaire, telle qu’un échec de liaison. La raison de l’échec est consignée dans le journal des erreurs système. Réessayez l’allocation.

AP_CONVERSATION_TYPE_MISMATCH

Code de retour secondaire ; le LU ou le TP partenaire ne prend pas en charge le type de conversation (de base ou mappé) spécifié dans la demande d’allocation.

AP_PIP_NOT_ALLOWED

Code de retour secondaire ; la demande d’allocation a spécifié des données PIP, mais le TP partenaire ne requiert pas ces données, ou la LU partenaire ne la prend pas en charge.

AP_PIP_NOT_SPECIFIED_CORRECTLY

Code de retour secondaire ; le TP partenaire requiert des données PIP, mais la demande d’allocation n’a spécifié aucune donnée PIP ou un nombre incorrect de paramètres.

AP_SECURITY_NOT_VALID

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

AP_SYNC_LEVEL_NOT_SUPPORTED

Code de retour secondaire ; le TP partenaire ne prend pas en charge les sync_level (AP_NONE ou AP_CONFIRM_SYNC_LEVEL) spécifiés dans la demande d’allocation, ou le sync_level n’a pas été reconnu.

AP_TP_NAME_NOT_RECOGNIZED

Code de retour secondaire ; le LU partenaire ne reconnaît pas le nom TP spécifié dans la demande d’allocation.

AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

Code de retour secondaire ; le LU distant a rejeté la demande d’allocation car il n’a pas pu démarrer le TP partenaire demandé. La condition est 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.

AP_TRANS_PGM_NOT_AVAIL_RETRY

Code de retour secondaire ; le LU distant a rejeté la demande d’allocation car il n’a pas pu démarrer le TP partenaire demandé. La situation peut être temporaire, par exemple un délai d’attente. La raison de l’erreur peut être consignée sur le nœud distant. Réessayez l’allocation.

AP_COMM_SUBSYSTEM_ABENDED
Code de retour principal ; indique l’une des situations suivantes :

  • Le nœud utilisé par cette conversation a rencontré un abandon (ABEND).

  • La connexion a été interrompue entre le programme transactionnel et le nœud PU 2.1 (erreur LAN).

  • Le processus SnaBase qui se déroule sur l’ordinateur du programme transactionnel a rencontré un abandon (ABEND).

    L’administrateur système doit examiner le journal des erreurs pour déterminer la raison de l’abandon.

    AP_CONV_FAILURE_NO_RETRY
    Code de retour principal ; la conversation a été interrompue en raison d’une condition permanente, telle qu’une erreur de protocole de session. L’administrateur système doit examiner le journal des erreurs système pour déterminer la cause de l’erreur. Ne recommencez pas la conversation tant que l’erreur n’a pas été corrigée.

    AP_CONV_FAILURE_RETRY
    Code de retour principal ; la conversation a été interrompue en raison d’une erreur temporaire. Redémarrez le TP pour voir si le problème se reproduit. Si c’est le cas, l’administrateur système doit examiner le journal des erreurs pour déterminer la cause de l’erreur.

    AP_CONVERSATION_TYPE_MIXED
    Code de retour principal ; le TP a émis des verbes de conversation de base et mappés. Un seul type peut être émis dans une conversation unique.

    AP_INVALID_VERB_SEGMENT
    Code de retour principal ; indique que le bloc de contrôle de verbe s’étend au-delà de la fin du segment de données.

    AP_PROG_ERROR_PURGING
    Code de retour principal ; en mode réception, en attente, PENDING_POST, confirmation, CONFIRM_SEND ou CONFIRM_DEALLOCATE, le TP partenaire émis MC_SEND_ERROR. Les données envoyées mais pas encore reçues sont purgées.

    AP_STACK_TOO_SMALL
    Code de retour principal ; indique que la taille de la pile de l’application est trop petite pour exécuter le verbe. Augmentez la taille de pile de votre application.

    AP_CONV_BUSY
    Code de retour principal ; il ne peut y avoir qu’un seul verbe de conversation en attente à la fois dans une conversation. Cela peut se produire si le TP local a plusieurs threads, et que plusieurs threads émettent des appels APPC en utilisant le même conv_id.

    AP_THREAD_BLOCKING
    Code de retour principal ; indique que le thread appelant se trouve déjà dans un appel de blocage.

    AP_UNEXPECTED_DOS_ERROR
    Code de retour principal ; indique que le système d’exploitation a retourné une erreur à APPC lors du traitement d’un appel APPC à partir du programme transactionnel local. Le code de retour du système d’exploitation a été retourné via secondary_rc. Il apparaît dans l’ordre Intel avec permutation d’octets. Si le problème persiste, consultez l’administrateur système.

    AP_DEALLOC_ABEND
    Code de retour principal ; la conversation a été désallouée pour l’une des raisons suivantes :

  • Le TP partenaire émis MC_DEALLOCATE avec dealloc_type défini sur AP_ABEND.

  • Le TP partenaire a rencontré un ABEND, provoquant l’envoi d’une demande de MC_DEALLOCATE par le serveur lu du partenaire.

Remarques

Selon la valeur du paramètre dealloc_type , la conversation peut être dans l’un des États indiqués dans le tableau suivant lorsque les problèmes de TP MC_DEALLOCATE.

Dealloc_type État autorisé
AP_FLUSH SEND
AP_SYNC_LEVEL SEND
AP_ABEND Tout État à l’exception de RESET
AP_ABEND_PROG Tout État à l’exception de RESET
AP_ABEND_SVC Tout État à l’exception de RESET
AP_ABEND_TIMER Tout État à l’exception de RESET

Les changements d’État, résumés dans le tableau suivant, sont basés sur la valeur de la primary_rc.

Primary_rc Nouvel État
AP_OK RESET
AP_ALLOCATION_ERROR RESET
AP_CONV_FAILURE_RETRY RESET
AP_CONV_FAILURE_NO_RETRY RESET
AP_DEALLOC_ABEND RESET
AP_DEALLOC_ABEND_PROG RESET
AP_DEALLOC_ABEND_SVC RESET
AP_DEALLOC_ABEND_TIMER RESET
AP_PROG_ERROR_PURGING RECEIVE

Avant de désallouer la conversation, ce verbe effectue l’équivalent de l’un des éléments suivants :

  • MC_FLUSH, en envoyant le contenu de la mémoire tampon d’envoi du lu local à l’unité logique du partenaire (et au TP).

  • MC_CONFIRM, en envoyant le contenu de la mémoire tampon d’envoi du lu local et une demande de confirmation au TP partenaire.

    Une fois que ce verbe a été exécuté avec succès, l’identificateur de conversation n’est plus valide.

    Le point de synchronisation LU 6,2 peut utiliser une optimisation des flux de messages appelés oubli implicite. Lorsque le protocole spécifie qu’un en-tête PS oublié est requis, le prochain workflow de la session implique la réception d’un oubli. Dans la situation normale, le TP est conscient du prochain transfert de données lors de la réception ou de l’envoi des données sur l’une de ses conversations de point de synchronisation.

    Toutefois, il est possible que le dernier message à transmettre soit provoqué par la conversation désallouée. Dans ce cas, le TP ne sait pas quand le prochain workflow de la session se produit. Pour fournir le TP avec cette notification, le verbe MC_DEALLOCATE est modifié de manière à autoriser le TP à inscrire une fonction de rappel qui sera appelée :

  • Lors de la première transmission normale (demande ou réponse) sur la session utilisée par la conversation.

  • Si la session est détachée avant tout autre flux de données.

  • Si la session se termine anormalement en raison d’une panne DLC.

    Le verbe MC_DEALLOCATE contient également un membre de champ de corrélation qui est retourné comme l’un des paramètres lorsque la fonction de rappel est appelée. L’application peut utiliser ce paramètre de quelque manière que ce soit (par exemple, en tant que pointeur vers un bloc de contrôle dans l’application).

    Le TP peut utiliser le paramètre de type passé à la fonction de rappel pour déterminer si le message indique qu’une oubli implicite a été reçue.

    Notez que le verbe MC_DEALLOCATE se termine probablement avant l’appel de la routine de rappel. La conversation est considérée comme étant en état de réinitialisation et aucun autre verbe ne peut être émis à l’aide de l’identificateur de conversation. Si l’application émet un verbe de TP_ENDED avant le prochain workflow de la session, la routine de rappel n’est pas appelée.

    Host Integration Server permet à TPs de libérer des conversations immédiatement après l’envoi de données en spécifiant le paramètre de type sur MC_SEND_DATA comme AP_SEND_DATA_DEALLOC_ *. Toutefois, les verbes de MC_SEND_DATA ne contiennent pas la fonction de rappel d’oubli implicite. Les TPs souhaitant recevoir une notification d’oubli implicite doivent émettre MC_DEALLOCATE explicitement.