Index: trunk/xcache.c
===================================================================
--- trunk/xcache.c	(revision 64)
+++ trunk/xcache.c	(revision 65)
@@ -1722,7 +1722,7 @@
 /* signal handler */
 static void (*original_sigsegv_handler)(int) = NULL;
-static void xcache_sigsegv_handler(int dummy) /* {{{ */
-{
-	if (original_sigsegv_handler == xcache_sigsegv_handler) {
+static void xcache_sigsegv_handler(int sig) /* {{{ */
+{
+	if (original_sigsegv_handler != xcache_sigsegv_handler) {
 		signal(SIGSEGV, original_sigsegv_handler);
 	}
@@ -1733,7 +1733,5 @@
 		chdir(xc_coredump_dir);
 	}
-	if (original_sigsegv_handler != xcache_sigsegv_handler) {
-		original_sigsegv_handler(dummy);
-	}
+	raise(sig);
 }
 /* }}} */
@@ -1902,5 +1900,7 @@
 	}
 
-	original_sigsegv_handler = signal(SIGSEGV, xcache_sigsegv_handler);
+	if (xc_coredump_dir && xc_coredump_dir[0]) {
+		original_sigsegv_handler = signal(SIGSEGV, xcache_sigsegv_handler);
+	}
 
 	xc_init_constant(module_number TSRMLS_CC);
@@ -1940,5 +1940,7 @@
 #endif
 
-	signal(SIGSEGV, original_sigsegv_handler);
+	if (xc_coredump_dir && xc_coredump_dir[0]) {
+		signal(SIGSEGV, original_sigsegv_handler);
+	}
 	if (xc_coredump_dir) {
 		pefree(xc_coredump_dir, 1);
