Change 16361 by pudge@pudge-mobile on 2002/05/03 01:56:24

        Safe signals for Mac OS

Affected files ...

.... //depot/macperl/macos/macish.c#3 edit
.... //depot/macperl/macos/macish.h#4 edit

Differences ...

==== //depot/macperl/macos/macish.c#3 (text) ====
Index: perl/macos/macish.c
--- perl/macos/macish.c.~1~     Thu May  2 20:00:05 2002
+++ perl/macos/macish.c Thu May  2 20:00:05 2002
@@ -799,6 +799,7 @@
 
 void MacPerl_DoAsyncTasks()
 {
+       dTHX;
        QElemPtr                        elem;
        MacPerl_AsyncTask * task;
        
@@ -806,8 +807,12 @@
        while (elem = sMacPerlAsyncQueue.qHead) {
                Dequeue(elem, &sMacPerlAsyncQueue);
                task = (MacPerl_AsyncTask *) elem;      /* Remove from queue */
-               task->fProc(task);                                              /* 
Call procedure */
-               task->fPending = false;                                 /* Allow it to 
be queued again */
+               task->fProc(task);                                      /* Call 
+procedure */
+               task->fPending = false;                         /* Allow it to be 
+queued again */
+       }
+
+       if (PL_sig_pending) {
+               despatch_signals();
        }
 }
 
@@ -822,6 +827,7 @@
        }
 }
 
+
 /*
  * Asynchronous tasks come in handy to exit gracefully from the middle of a script
  */

==== //depot/macperl/macos/macish.h#4 (text) ====
Index: perl/macos/macish.h
--- perl/macos/macish.h.~1~     Thu May  2 20:00:05 2002
+++ perl/macos/macish.h Thu May  2 20:00:05 2002
@@ -207,7 +207,7 @@
 
 MP_EXT Boolean                 gMacPerl_HasAsyncTasks;
 void MacPerl_DoAsyncTasks();
-#define PERL_ASYNC_CHECK() while (gMacPerl_HasAsyncTasks) MacPerl_DoAsyncTasks()
+#define PERL_ASYNC_CHECK() while (gMacPerl_HasAsyncTasks || PL_sig_pending) 
+MacPerl_DoAsyncTasks()
 typedef struct MacPerl_AsyncTask {
        void    *       qLink;          /* Don't set */
        short    qType;         /* Queue type. Ignore */
End of Patch.

Reply via email to