Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le verbe MC_DEALLOCATE désalloue 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 de l’opération de verbe, AP_M_DEALLOCATE.
opext
Paramètre fourni. Spécifie l’extension d’opération de verbe, AP_MAPPED_CONVERSATION.
réserver2
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 varient en fonction du verbe APPC émis. Consultez les codes de retour pour obtenir des codes d’erreur valides pour ce verbe.
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 varient en fonction du verbe APPC émis. Consultez les codes de retour pour obtenir des codes d’erreur valides pour ce verbe.
tp_id
Paramètre fourni. Identifie le TP local. La valeur de ce paramètre a été retournée par TP_STARTED dans l’appel du TP 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 l’appel du TP ou par RECEIVE_ALLOCATE dans le TP appelé.
réserver3
Champ réservé.
dealloc_type
Paramètre fourni. Spécifie comment effectuer la désallocation.
Pour MC_DEALLOCATE, utilisez AP_ABEND pour libérer la conversation anormalement. Si la conversation est en état SEND lorsque le tp local émet MC_DEALLOCATE, APPC envoie le contenu de la mémoire tampon d’envoi de l’unité logique locale au TP partenaire avant de déallouer la conversation. Si la conversation est dans l’état RECEIVE ou PENDING_POST, APPC purge toutes les données entrantes avant de déallouer 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 de l’unité logique locale au tp partenaire avant de déallouer la conversation. Cette valeur est autorisée uniquement si la conversation est dans l’état SEND.
AP_SYNC_LEVEL utilise le niveau de synchronisation de la conversation (établi par MC_ALLOCATE) pour déterminer comment libérer la conversation. Cette valeur est autorisée uniquement si la conversation est dans l’état SEND.
Si le niveau de synchronisation de la conversation est AP_NONE, APPC envoie le contenu de la mémoire tampon d’envoi de l’unité logique locale au tp partenaire avant d’allouer la conversation.
Si le niveau de synchronisation est AP_CONFIRM_SYNC_LEVEL, APPC envoie le contenu de la mémoire tampon d’envoi de l’unité logique locale et une demande de confirmation au tp partenaire. Lors de la réception de la confirmation du TP partenaire, APPC désalloue la conversation. Si, toutefois, le tp partenaire signale une erreur, la conversation reste allouée.
Rappel
Paramètre fourni. Présente uniquement si le bit 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, car l’adresse de la procédure est passée à la DLL APPC. Les paramètres passés à la fonction sont les suivants :
vcb
Pointeur vers le bloc de contrôle verbe MC_DEALLOCATE qui a provoqué la désallouation de la conversation.
tp_id
Identificateur TP du TP appartenant à la conversation libérée.
conv_id
Identificateur de conversation de la conversation libérée.
type
Type du flux de message qui a provoqué l’appel du rappel. Les valeurs possibles sont les suivantes :
AP_DATA_FLOW
Flux de données normal sur la session.
AP_UNBIND
La session n’a pas été lié normalement.
AP_FAILURE
La session s’est terminée en raison d’une panne.
corrélateur
Cette valeur est le corrélateur spécifié sur le verbe MC_DEALLOCATE .
corrélateur
Paramètre fourni. Présente uniquement si le bit AP_EXTD_VCB est défini dans le membre opext indiquant la prise en charge de l’API de point de synchronisation. Ce champ corrélateur 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.
réserver4
Champ réservé.
Codes de retour
AP_OK
Code de retour principal ; le verbe exécuté avec succès.
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 correspondait pas à un identificateur de conversation affecté par APPC.
AP_BAD_TP_ID
Code de retour secondaire ; la valeur de tp_id ne correspondait pas à un identificateur TP attribué par APPC.
AP_DEALLOC_BAD_TYPE
Code de retour secondaire ; le paramètre dealloc_type n’a pas été défini sur une valeur valide.
AP_STATE_CHECK
Code de retour principal ; le verbe n’a pas 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 dans l’état SEND, 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 était 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 dans l’état SEND et le TP a tenté de vider la mémoire tampon d’envoi. Cette tentative s’est produite parce que la valeur de dealloc_type était AP_FLUSH ou parce que la valeur de dealloc_type était AP_SYNC_LEVEL et que le niveau de synchronisation de la conversation était AP_NONE. Dans les deux cas, la conversation doit être dans 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é par le biais d’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’une défaillance de lien. La raison de l’échec est journalisée dans le journal des erreurs système. Réessayez l’allocation.
AP_CONVERSATION_TYPE_MISMATCH
Code de retour secondaire ; l’unité logique partenaire ou tp 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 spécifiée des données PIP, mais le tp partenaire n’a pas besoin de ces données, ou l’unité logique du partenaire ne le 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 spécifiée n’a pas de données PIP ou un nombre incorrect de paramètres.
AP_SECURITY_NOT_VALID
Code de retour secondaire ; l’identificateur de l’utilisateur ou le mot de passe spécifié dans la demande d’allocation n’a pas été accepté par l’unité logique partenaire.
AP_SYNC_LEVEL_NOT_SUPPORTED
Code de retour secondaire ; le tp partenaire ne prend pas en charge le sync_level (AP_NONE ou AP_CONFIRM_SYNC_LEVEL) spécifié dans la demande d’allocation, ou le sync_level n’a pas été reconnu.
AP_TP_NAME_NOT_RECOGNIZED
Code de retour secondaire ; l’unité logique 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 ; l’unité logique distante a rejeté la demande d’allocation, car elle n’a pas pu démarrer le tp partenaire demandé. La condition est permanente. La raison de l’erreur peut être journalisé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 ; l’unité logique distante a rejeté la demande d’allocation, car elle n’a pas pu démarrer le tp partenaire demandé. La condition peut être temporaire, telle qu’un délai d’attente. La raison de l’erreur peut être journalisée sur le nœud distant. Réessayez l’allocation.
AP_COMM_SUBSYSTEM_ABENDED
Code de retour principal ; indique l’une des conditions suivantes :
Le nœud utilisé par cette conversation a rencontré un ABEND.
La connexion entre le tp et le nœud PU 2.1 a été interrompue (erreur LAN).
Le SnaBase sur l’ordinateur du TP a rencontré un ABEND.
L’administrateur système doit examiner le journal des erreurs pour déterminer la raison de l’ABEND.
AP_CONV_FAILURE_NO_RETRY
Code de retour principal ; la conversation a été arrêtée 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 réessayez 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é arrêtée en raison d’une erreur temporaire. Redémarrez le TP pour voir si le problème se produit à nouveau. 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 seule conversation.AP_INVALID_VERB_SEGMENT
Code de retour principal ; le VCB s’étend au-delà de la fin du segment de données.AP_PROG_ERROR_PURGING
Code de retour principal ; dans l’état RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND ou CONFIRM_DEALLOCATE, le TP partenaire a émis MC_SEND_ERROR. Les données envoyées, mais qui ne sont pas encore reçues, sont vidées.AP_STACK_TOO_SMALL
Code de retour principal ; la taille de la pile de l’application est trop petite pour exécuter le verbe. Augmentez la taille de la pile de votre application.AP_CONV_BUSY
Code de retour principal ; il ne peut y avoir qu’un seul verbe de conversation en suspens à la fois sur n’importe quelle conversation. Cela peut se produire si le TP local a plusieurs threads et que plusieurs threads émettent des appels APPC à l’aide du même conv_id.AP_THREAD_BLOCKING
Code de retour principal ; le thread appelant est déjà dans un appel bloquant.AP_UNEXPECTED_DOS_ERROR
Code de retour principal ; le système d’exploitation a retourné une erreur à APPC lors du traitement d’un appel APPC à partir du TP local. Le code de retour du système d’exploitation est retourné via le secondary_rc. Il apparaît dans l’ordre d’échange d’octets Intel. Si le problème persiste, consultez l’administrateur système.AP_DEALLOC_ABEND
Code de retour principal ; la conversation a été libérée pour l’une des raisons suivantes :Le tp partenaire a émis MC_DEALLOCATE avec dealloc_type défini sur AP_ABEND .
Le tp partenaire a rencontré un ABEND, ce qui a provoqué l’envoi d’une demande de MC_DEALLOCATE .
Remarques
Selon la valeur du paramètre dealloc_type , la conversation peut se trouver dans l’un des états indiqués dans le tableau suivant lorsque le tp émet MC_DEALLOCATE.
| Dealloc_type | État autorisé |
|---|---|
| AP_FLUSH | ENVOYER |
| AP_SYNC_LEVEL | ENVOYER |
| 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 modifications d’état, résumées dans le tableau suivant, sont basées sur la valeur du primary_rc.
| Primary_rc | Nouvel état |
|---|---|
| AP_OK | RÉINITIALISER |
| AP_ALLOCATION_ERROR | RÉINITIALISER |
| AP_CONV_FAILURE_RETRY | RÉINITIALISER |
| AP_CONV_FAILURE_NO_RETRY | RÉINITIALISER |
| AP_DEALLOC_ABEND | RÉINITIALISER |
| AP_DEALLOC_ABEND_PROG | RÉINITIALISER |
| AP_DEALLOC_ABEND_SVC | RÉINITIALISER |
| AP_DEALLOC_ABEND_TIMER | RÉINITIALISER |
| AP_PROG_ERROR_PURGING | RECEVOIR |
Avant de déallouer 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 de l’unité logique locale à l’unité logique partenaire (ET TP).
MC_CONFIRM, en envoyant le contenu de la mémoire tampon d’envoi de l’unité logique locale et une demande de confirmation au TP partenaire.
Une fois que ce verbe a réussi à s’exécuter, 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 FORGET PS est requis, le flux de données suivant sur la session implique qu’un FORGET a été reçu. Dans la situation normale, le TP est conscient du flux de données suivant lorsque les données sont reçues ou envoyées sur l’une de ses conversations de point de synchronisation.
Toutefois, il est possible que le dernier message à transmettre soit dû à la désalloué de la conversation. Dans ce cas, le TP n’est pas conscient lorsque le flux de données suivant sur la session se produit. Pour fournir au TP cette notification, le verbe MC_DEALLOCATE est modifié pour permettre au TP d’inscrire une fonction de rappel qui sera appelée :
Lors de la première transmission de flux normale (demande ou réponse) sur la session utilisée par la conversation.
Si la session n’est pas lié avant tout autre flux de données.
Si la session est arrêtée anormalement en raison d’une panne DLC.
Le verbe MC_DEALLOCATE contient également un membre de champ corrélateur retourné en tant que l’un des paramètres lorsque la fonction de rappel est appelée. L’application peut utiliser ce paramètre de n’importe quelle façon (par exemple, en tant que pointeur vers un bloc de contrôle dans l’application).
Le TP peut utiliser le paramètre de type transmis à la fonction de rappel pour déterminer si le flux de message indique qu’un oubli implicite a été reçu.
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 à l’état RESET et aucun autre verbe ne peut être émis à l’aide de l’identificateur de conversation. Si l’application émet un verbe TP_ENDED avant le flux de données suivant sur la session, la routine de rappel n’est pas appelée.
Host Integration Server permet aux fournisseurs de services 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 en tant que AP_SEND_DATA_DEALLOC_*. Toutefois, les verbes MC_SEND_DATA ne contiennent pas la fonction de rappel d’oubli implicite. Les fournisseurs de services qui souhaitent recevoir une notification d’oubli implicite doivent émettre MC_DEALLOCATE explicitement.