Commit 238ca31e authored by Denis Bilenko's avatar Denis Bilenko

core: add set_syserr_cb() function

parent 2bcc11ff
......@@ -30,6 +30,7 @@ cdef extern from *:
int FD_SETSIZE
int ioctlsocket(int, int, unsigned long*)
int FIONREAD
int errno
UNDEF = libev.EV_UNDEF
......@@ -735,6 +736,29 @@ cdef public class callback(watcher) [object PyGeventCallbackObject, type PyGeven
return self.callback is not None
__SYSERR_CALLBACK = None
cdef void _syserr_cb(char* msg) with gil:
try:
__SYSERR_CALLBACK(msg, errno)
except:
set_syserr_cb(None)
raise
def set_syserr_cb(callback):
global __SYSERR_CALLBACK
if callback is None:
libev.ev_set_syserr_cb(NULL)
__SYSERR_CALLBACK = None
elif hasattr(callback, '__call__'):
libev.ev_set_syserr_cb(<void *>_syserr_cb)
__SYSERR_CALLBACK = callback
else:
raise TypeError('Expected callable or None, got %r' % (callback, ))
def set_exc_info(object type, object value):
cdef PyThreadState* tstate = PyThreadState_GET()
Py_XDECREF(tstate.exc_type)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment