X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib-python/blobdiff_plain/b3c87d862e8f44754113ee9bf374e9fcfbc9e7ac..b170d65aecec439b1ca2dd52f60f47f547d365e3:/bres.pyx?ds=sidebyside diff --git a/bres.pyx b/bres.pyx index ebc6262..30aac12 100644 --- a/bres.pyx +++ b/bres.pyx @@ -32,6 +32,10 @@ cdef class SelResolve: cdef _failed def __init__(me, *hunoz, **hukairz): raise TypeError, 'abstract class' + def __dealloc__(me): + if me._activep: + me._dead() + bres_abort(&me.r) property activep: def __get__(me): return _tobool(me._activep) @@ -68,10 +72,10 @@ cdef class SelResolve: cdef class SelResolveByName (SelResolve): def __new__(me, char *name, resolvedproc = None, failedproc = None, *hunoz, **hukairz): - bres_byname(&me.r, name, _resfunc, me) me._resolved = _checkcallable(resolvedproc, 'resolved proc') me._failed = _checkcallable(failedproc, 'failed proc') me._activep = 1 + bres_byname(&me.r, name, _resfunc, me) def __init__(me, name, resolvedproc = None, failedproc = None): pass @@ -81,20 +85,20 @@ cdef class SelResolveByAddr (SelResolve): cdef in_addr ia if not inet_aton(addr, &ia): raise TypeError, 'bad IP address' - bres_byaddr(&me.r, ia, _resfunc, me) me._resolved = _checkcallable(resolvedproc, 'resolved proc') me._failed = _checkcallable(failedproc, 'failed proc') me._activep = 1 + bres_byaddr(&me.r, ia, _resfunc, me) def __init__(me, addr, resolvedproc = None, failedproc = None): pass -cdef void _resfunc2(hostent *h, void *arg): +cdef void _resfunc(hostent *h, void *arg): cdef SelResolve r cdef int i r = arg r._dead() if h is NULL: - r.failed(r) + r.failed() else: alias = [] addr = [] @@ -107,10 +111,6 @@ cdef void _resfunc2(hostent *h, void *arg): addr.append(inet_ntoa((h.h_addr_list[i])[0])) i = i + 1 r.resolved(h.h_name, alias, addr) -cdef void _resfunc(hostent *h, void *arg): - PyEval_AcquireLock() - _resfunc2(h, arg) - PyEval_ReleaseLock() bres_exec(NULL) bres_init(&_sel)