=================================================================== RCS file: /home/cvs/OpenXM/src/kxx/oxserver00.c,v retrieving revision 1.14 retrieving revision 1.19 diff -u -p -r1.14 -r1.19 --- OpenXM/src/kxx/oxserver00.c 2004/03/08 08:24:42 1.14 +++ OpenXM/src/kxx/oxserver00.c 2015/10/08 11:49:38 1.19 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kxx/oxserver00.c,v 1.13 2003/11/20 11:41:44 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kxx/oxserver00.c,v 1.18 2015/10/08 08:14:25 takayama Exp $ */ /* nullserver01 */ #include #include @@ -20,8 +20,10 @@ int NoExecution = 0; extern int SerialOX; /* Serial number of the packets sent. */ extern int SerialCurrent; /* Current Serial number of the recieved packet. */ extern int OXprintMessage; /* print oxmessages? */ +extern int Calling_ctrlC_hook; +extern int RestrictedMode, RestrictedMode_saved; -#if defined(__CYGWIN__) +#if defined(__CYGWIN__) || defined(__MSYS__) sigjmp_buf EnvOfChildServer; #else jmp_buf EnvOfChildServer; @@ -97,7 +99,7 @@ nullserver(int fdStreamIn,int fdStreamOut) { ox_stream ostreamOut; char sreason[1024]; extern void controlResetHandler(); -#if defined(__CYGWIN__) +#if defined(__CYGWIN__) || defined(__MSYS__) extern sigjmp_buf EnvOfStackMachine; #else extern jmp_buf EnvOfStackMachine; @@ -129,17 +131,25 @@ nullserver(int fdStreamIn,int fdStreamOut) { if (PacketMonitor) fp2watch(ostreamOut,stdout); } + fprintf(stderr,"Hello world.\n"); OXprintMessage = 1; + JmpMessage = 1; + aaa : ; #if defined(__CYGWIN__) - if (sigsetjmp(EnvOfChildServer,1)) { + if (MYSIGSETJMP(EnvOfChildServer,1)) { #else - if (setjmp(EnvOfChildServer)) { + if (MYSETJMP(EnvOfChildServer)) { #endif fprintf(stderr,"childServerMain: jump here.\n"); if (OxInterruptFlag == 0) { fprintf(stderr," ?! \n"); fflush(NULL); } - KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ + if (!Calling_ctrlC_hook) { + Calling_ctrlC_hook = 1; RestrictedMode = 0; + KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ + RestrictedMode = RestrictedMode_saved; + } + Calling_ctrlC_hook = 0; KSexecuteString(" (Computation is interrupted.) "); signal(SIGUSR1,controlResetHandler); goto aaa; } else { @@ -147,9 +157,9 @@ nullserver(int fdStreamIn,int fdStreamOut) { signal(SIGUSR1,controlResetHandler); } #if defined(__CYGWIN__) - if (sigsetjmp(EnvOfStackMachine,1)) { + if (MYSIGSETJMP(EnvOfStackMachine,1)) { #else - if (setjmp(EnvOfStackMachine)) { + if (MYSETJMP(EnvOfStackMachine)) { #endif fprintf(stderr,"childServerMain: jump here by EnvOfStackMachine or timeout.\n"); if (OxInterruptFlag == 0) { @@ -165,7 +175,12 @@ nullserver(int fdStreamIn,int fdStreamOut) { */ Sm1_pushError2(SerialCurrent,-1,"Global jump by sm1 error"); - KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ + if (!Calling_ctrlC_hook) { + Calling_ctrlC_hook = 1; RestrictedMode = 0; + KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ + RestrictedMode = RestrictedMode_saved; + } + Calling_ctrlC_hook = 0; signal(SIGUSR1,controlResetHandler); goto aaa ; } else { if (JmpMessage) fprintf(stderr,"Set EnvOfStackMachine.\n"); @@ -352,7 +367,7 @@ nullserver_simplest(int fd) { int c; while(1) { c = readOneByte(fd); - if (c == '@') { return; } + if (c == '@') { return 0; } } } @@ -367,10 +382,11 @@ void controlResetHandler(sig) if (OxCritical) { return; }else{ -#if defined(__CYGWIN__) - siglongjmp(EnvOfChildServer,2); /* returns 2 for ctrl-C */ + (void) traceShowStack(); traceClearStack(); +#if defined(__CYGWIN__) || defined(__MSYS__) + MYSIGLONGJMP(EnvOfChildServer,2); /* returns 2 for ctrl-C */ #else - longjmp(EnvOfChildServer,2); /* returns 2 for ctrl-C */ + LONGJMP(EnvOfChildServer,2); /* returns 2 for ctrl-C */ #endif } }