From: Mark Wooding Date: Tue, 2 Jan 2007 12:47:56 +0000 (+0000) Subject: bres: Ooops, this one was rather buggy. X-Git-Tag: 1.0.1~9 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib-python/commitdiff_plain/b170d65aecec439b1ca2dd52f60f47f547d365e3 bres: Ooops, this one was rather buggy. * The fail function passed on a spurious argument. * More importantly, the SelResolveBy{Name,Addr} constructors set things up in the wrong order, so if the resolver didn't need to do anything, it got very confused. * There was no destructor. --- diff --git a/bres.pyx b/bres.pyx index 162ff02..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,10 +85,10 @@ 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 @@ -94,7 +98,7 @@ cdef void _resfunc(hostent *h, void *arg): r = arg r._dead() if h is NULL: - r.failed(r) + r.failed() else: alias = [] addr = []