diff --git a/gen_wrap.py b/gen_wrap.py
index e5649ca263927c9f170fcb56d23096beb3ce9ea2..d77449a4a9396eb722454ee0dea370b3bbb5a7f9 100644
--- a/gen_wrap.py
+++ b/gen_wrap.py
@@ -317,6 +317,7 @@ import six
 import sys
 import signal
 import logging
+import threading
 
 
 _PY3 = sys.version_info >= (3,)
@@ -434,17 +435,19 @@ class _ManagedCString(object):
 class DelayedKeyboardInterrupt(object):
     def __enter__(self):
         self.signal_received = False
-        self.old_handler = signal.getsignal(signal.SIGINT)
-        signal.signal(signal.SIGINT, self.handler)
+        if isinstance(threading.current_thread(), threading._MainThread):
+            self.old_handler = signal.getsignal(signal.SIGINT)
+            signal.signal(signal.SIGINT, self.handler)
 
     def handler(self, signal, frame):
         self.signal_received = (signal, frame)
         logging.debug('SIGINT received. Delaying KeyboardInterrupt.')
 
     def __exit__(self, type, value, traceback):
-        signal.signal(signal.SIGINT, self.old_handler)
-        if self.signal_received:
-            self.old_handler(*self.signal_received)
+        if isinstance(threading.current_thread(), threading._MainThread):
+            signal.signal(signal.SIGINT, self.old_handler)
+            if self.signal_received:
+                self.old_handler(*self.signal_received)
 """
 
 CLASS_MAP = {
@@ -1367,7 +1370,9 @@ def write_method_wrapper(gen, cls_name, meth):
 
             py_ret_cls = isl_class_to_py_class(ret_cls)
             safety(
-                    "_result = None if _result == ffi.NULL else {0}(_data=_result)"
+                    "_result = None if "
+                    "(_result == ffi.NULL or _result is None) "
+                    "else {0}(_data=_result)"
                     .format(py_ret_cls))
 
             check("""
@@ -1446,9 +1451,9 @@ def write_method_wrapper(gen, cls_name, meth):
 
     gen("try:")
     with Indentation(gen):
+        gen("_result = None")
         gen("with DelayedKeyboardInterrupt():")
         with Indentation(gen):
-            gen("_result = None")
             gen(
                 "_result = lib.{c_name}({args})"
                 .format(c_name=meth.c_name, args=", ".join(passed_args)))