00001 00006 #include "libmgk.h" 00007 00008 void 00009 __mgk_execute_node(mgk_node * np) 00010 { 00011 mgk_buffer *bp, *protlist; 00012 np->status = RUNNING; 00013 if (setjmp(__mgk_node_abort_context) == 0) { 00014 __mgk_running_node = np; 00015 switch (np->tmode) { 00016 case AT_IFANY: 00017 case AT_IFALL: 00018 (*np->script) (); 00019 break; 00020 case AT_SPEC: 00021 (*np->active_trigger->script) (); 00022 break; 00023 } 00024 __mgk_running_node = NULL; 00025 np->status = WAITING; 00026 __mgk_update(np); 00027 } 00028 else { 00029 __mgk_running_node = NULL; 00030 np->status = WAITING; 00031 np->priority = MGK_NODE_STOP_PRIORITY; 00032 } 00033 for (bp = np->buffer_list, protlist = NULL; bp; bp = np->buffer_list) { 00034 np->buffer_list = bp->next; 00035 if (!bp->refval) { 00036 __mgk_free_buffer_header(bp); 00037 } 00038 else if (bp->refval == np) { 00039 bp->next = protlist; 00040 protlist = bp; 00041 } 00042 else { 00043 bp->next = NULL; 00044 } 00045 } 00046 np->buffer_list = protlist; 00047 }