[macruby-changes] [4492] MacRuby/trunk/gcd.c

source_changes at macosforge.org source_changes at macosforge.org
Thu Sep 2 18:59:55 PDT 2010


Revision: 4492
          http://trac.macosforge.org/projects/ruby/changeset/4492
Author:   lsansonetti at apple.com
Date:     2010-09-02 18:59:54 -0700 (Thu, 02 Sep 2010)
Log Message:
-----------
when a GCD block exists because of an uncaught exception, write a message on stderr

Modified Paths:
--------------
    MacRuby/trunk/gcd.c

Modified: MacRuby/trunk/gcd.c
===================================================================
--- MacRuby/trunk/gcd.c	2010-09-03 01:35:21 UTC (rev 4491)
+++ MacRuby/trunk/gcd.c	2010-09-03 01:59:54 UTC (rev 4492)
@@ -28,8 +28,6 @@
 // variable to a queue. (Not that that is a good idea.)
 
 static SEL selClose;
-static aslmsg gcd_msg = NULL;
-#define GCD_DEBUG(text) asl_log(NULL, gcd_msg, ASL_LEVEL_DEBUG, "%s", text)
 
 // TODO: Make Queue and Source inherit from Dispatch::Base
 // so they can use a common definition of suspend/resume
@@ -326,7 +324,6 @@
     {
         OSSpinLockLock(&_suspensionLock);
         while (queue->suspension_count > 0) {
-            GCD_DEBUG("Finalizing a suspended queue.");
             queue->suspension_count--;
             dispatch_resume(queue->queue);
         }
@@ -342,10 +339,9 @@
 }
 
 static VALUE
-rb_block_rescue(VALUE data)
+rb_block_rescue(VALUE data, VALUE exc)
 {
-    char *text = (char *)data;
-    GCD_DEBUG(text);
+    fprintf(stderr, "*** Dispatch block exited prematurely because of an uncaught exception:\n%s\n", rb_str_cstr(rb_format_exception_message(exc)));
     return Qnil;
 }
 
@@ -361,7 +357,7 @@
 rb_block_dispatcher(void *data)
 {
     assert(data != NULL);
-    rb_rescue(rb_block_release_eval, (VALUE)data, rb_block_rescue, (VALUE)"gcd.c: Exception in rb_block_dispatcher");
+    rb_rescue(rb_block_release_eval, (VALUE)data, rb_block_rescue, Qnil);
 }
 
 static rb_vm_block_t *
@@ -1019,7 +1015,6 @@
     if (src->source != NULL) {
         OSSpinLockLock(&_suspensionLock);    
         while (src->suspension_count > 0) {
-            GCD_DEBUG("Finalizing a suspended source.");
             src->suspension_count--;
             dispatch_resume(src->source);
         }
@@ -1129,18 +1124,12 @@
 static void
 rb_semaphore_finalize(void *rcv, SEL sel)
 {
-    BOOL is_unbalanced = false;
     if (RSemaphore(rcv)->sem != NULL) {
-    	while (dispatch_semaphore_signal(RSemaphore(rcv)->sem) != 0) {
-            is_unbalanced = true;
-    	}
-    	while (--RSemaphore(rcv)->count >= 0) {
-    	    dispatch_semaphore_signal(RSemaphore(rcv)->sem);
-    	}
-    	if (is_unbalanced == true) {
-            GCD_DEBUG("Finalizing a waiting Dispatch::Semaphore.");
-        }
-	    dispatch_release(RSemaphore(rcv)->sem);
+	while (dispatch_semaphore_signal(RSemaphore(rcv)->sem) != 0) {}
+	while (--RSemaphore(rcv)->count >= 0) {
+	    dispatch_semaphore_signal(RSemaphore(rcv)->sem);
+	}
+	dispatch_release(RSemaphore(rcv)->sem);
     }
     if (rb_semaphore_finalize_super != NULL) {
         ((void(*)(void *, SEL))rb_semaphore_finalize_super)(rcv, sel);
@@ -1366,11 +1355,8 @@
 /* Constants for future reference */
     selClose = sel_registerName("close");
     assert(selClose != NULL);
-    gcd_msg = asl_new(ASL_TYPE_MSG);
-    asl_set(gcd_msg, ASL_KEY_FACILITY, "org.macruby.gcd");
 }
 
-
 #else
 
 void
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100902/4b6abd9f/attachment-0001.html>


More information about the macruby-changes mailing list