Annotation of os2sdk/demos/examples/exitlist/exitlist.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Example of DOSEXITLIST usage.
                      3:  *
                      4:  * Typically, exit list routines are used to free any resources that the
                      5:  * process may have owned, and leave any shared resources in a consistent
                      6:  * state. Semaphores and shared memory are the common cases. It is not
                      7:  * necessary to close files, since the system does that automatically
                      8:  * when a process terminates.
                      9:  *
                     10:  * When a process is in exit list processing, it is already in a
                     11:  * half-terminated state, and should be very careful not to cause
                     12:  * problems or execute too long.  Specifically, actions such as waiting
                     13:  * on semaphores or for other processes to finish are extremely bad
                     14:  * ideas.  It is not possible to create new threads or exec another
                     15:  * process while in exit list processing.
                     16:  *
                     17:  * This example shows exit list processing routines being added and removed.
                     18:  *
                     19:  * Copyright (C) Microsoft Corp. 1986
                     20:  */
                     21: 
                     22: #include <doscalls.h>
                     23: 
                     24: void e_handler1();                     /* two exit handler routines */
                     25: void e_handler2();
                     26: 
                     27: #define        EXLIST_ADD      1               /* add routine to exit list */
                     28: #define        EXLIST_REMOVE   2               /* remove routine from exit list */
                     29: #define        EXLIST_DONE     3               /* terminate exit list handler */
                     30: 
                     31: void main()
                     32: {
                     33:        /* add a routine to the termination list */
                     34:        DOSEXITLIST(EXLIST_ADD, e_handler1);
                     35:        
                     36:        /* add another routine to the termination list */
                     37:        DOSEXITLIST(EXLIST_ADD, e_handler2);
                     38: 
                     39:        /* remove a routine from the termination list */
                     40:        DOSEXITLIST(EXLIST_REMOVE, e_handler1);
                     41:        
                     42:        /* exit this process */
                     43:        printf("about to exit\n");
                     44:        DOSEXIT(1,0);
                     45: }
                     46: 
                     47: /* first exit handler, not actually called in this example */
                     48: void e_handler1()
                     49: {
                     50:        /* shared resource cleanup should be done here */
                     51:        printf("this is exit handler 1\n");
                     52: 
                     53:        /* advance to next handler in exit list (if any) */
                     54:        DOSEXITLIST(EXLIST_DONE, (char *)0);
                     55: }
                     56: 
                     57: /* second exit handler - this one is called when the process terminates */
                     58: void e_handler2()
                     59: {
                     60:        /* shared resource cleanup should be done here */
                     61:        printf("this is exit handler 2\n");
                     62: 
                     63:        /* advance to next handler in exit list (if any) */
                     64:        DOSEXITLIST(EXLIST_DONE, (char *)0);
                     65: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.