From b170d65aecec439b1ca2dd52f60f47f547d365e3 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Tue, 2 Jan 2007 12:47:56 +0000 Subject: [PATCH] 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. --- bres.pyx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 = [] -- 2.11.0