Re: pragma Attach_Handler : Interrupt 15 is reserved
Thomas De Contes <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Le 10 déc. 2010 à 22:29, Jeffrey R. Carter a écrit : > On 12/10/2010 12:28 PM, Thomas De Contes wrote: >> >> avec ce code : >> >> protected gestionnaireDeSignaux is >> procedure extinction; >> pragma Attach_Handler(extinction, Ada.Interrupts.Names.SIGTERM); >> end gestionnaireDeSignaux; >> >> je me mange un >> raised PROGRAM_ERROR : Interrupt 15 is reserved > > pragma Unreserve_All_Interrupts; merci d'avoir répondu :-) (dans le corps du paquetage) pragma Unreserve_All_Interrupts; protected gestionnaireDeSignaux is procedure extinction; pragma Attach_Handler(extinction, Ada.Interrupts.Names.SIGTERM); end gestionnaireDeSignaux; ainsi que protected gestionnaireDeSignaux is pragma Unreserve_All_Interrupts; procedure extinction; pragma Attach_Handler(extinction, Ada.Interrupts.Names.SIGTERM); end gestionnaireDeSignaux; n'ont aucun effet : j'ai toujours l'erreur, et Ctrl-C marche toujours en suivant http://gcc.gnu.org/onlinedocs/gnat_rm/Pragma-Unreserve_005fAll_005fInterrupts.html , je suis allé voir a-intnam.ads et 2 choses m'ont étonné : - dans ce fichier a-intnam.ads, il est indiqué que seul SIGINT est géré par pragma Unreserve_All_Interrupts pourquoi SIGTERM n'en fait pas partie, alors qu'il est manifestement réservé par le "run-time Ada" ? - pragma Unreserve_All_Interrupts est censé "débrancher" tous les signaux qui peuvent l'être, et ils deviennent alors tous sans effet, même quand ils en ont un par défaut, j'ai bien compris ? si oui, on dirait que même SIGINT ne marche pas avec pragma Unreserve_All_Interrupts, puisque Ctrl-C marche toujours puis j'ai regardé Interrupt_State http://gcc.gnu.org/onlinedocs/gnat_rm/Pragma-Interrupt_005fState.html et c'est juste ce qu'il me fallait, puisque, ne connaissant pas parfaitement bien les signaux, je ne souhaite pas tous les désactiver mais seulement ceux dont j'ai besoin (si le "run-time Ada" fait certaines choses, c'est peut être pour de bonnes raisons) pragma Interrupt_State( Ada.Interrupts.Names.SIGTERM ,User); protected gestionnaireDeSignaux is procedure extinction; pragma Attach_Handler( extinction, Ada.Interrupts.Names.SIGTERM ); end gestionnaireDeSignaux; et en plus, cette fois, (on dirait bien que) ça marche :-) quand j'envoie un kill, ça ne quitte pas comme prévu, ça tombe dans une boucle infinie, mais je suppose que c'est un bug plus loin, et que cette partie là marche correctement :-) reste un truc qui me derange un petit peu : la portabilité à l'origine j'aimais pas trop utiliser les pragma, parce que ça sert un peu à tout et n'importe quoi, donc c'est pas vraiment synonyme de lisibilité, et surtout une bonne partie est définie par le compilateur alors bon, à la limite, ceux qui sont definis par le langage, meme si j'aime pas trop la forme, considerons qu'on peut les utiliser à volonté parce qu'ils font partie du langage reste pragma Interrupt_State, défini par gnat : je ne sais plus ce qu'un compilateur est censé faire, quand il voit un pragma qu'il ne connait pas, est ce que quelqu'un aurais quelque chose à me conseiller, pour rendre mon code plus portable ? -- Téléassistance / Télémaintenance http://www.portparallele.com/ThomasDECONTES/ _______________________________________________ Site WWW de l'association Ada-France: http://www.ada-france.org/ [email protected] http://www.ada-france.org/mailman/listinfo/ada-france