diff options
author | Martin Nagy <mnagy@redhat.com> | 2010-01-13 17:03:53 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-01-14 09:00:08 -0500 |
commit | 9654795a488f0094f525ef505353fd5de4e6878f (patch) | |
tree | 381cb9294f6287111cb14512e86b2b5140765b90 | |
parent | 2d53bb82d617be1866762bf3b3c19fc31941b41c (diff) | |
download | sssd-9654795a488f0094f525ef505353fd5de4e6878f.tar.gz sssd-9654795a488f0094f525ef505353fd5de4e6878f.tar.bz2 sssd-9654795a488f0094f525ef505353fd5de4e6878f.zip |
Don't recursively call ares_process_fd() from fd_event()
Since ares_process_fd() might also cause fd_event() to be called again,
calling ares_process_fd() is unwise. The bug will cause a crash if
c-ares is using tcp connections.
Fixes: #384
-rw-r--r-- | server/resolv/async_resolv.c | 17 |
1 files changed, 0 insertions, 17 deletions
diff --git a/server/resolv/async_resolv.c b/server/resolv/async_resolv.c index 5fd4084b..ff84b386 100644 --- a/server/resolv/async_resolv.c +++ b/server/resolv/async_resolv.c @@ -195,7 +195,6 @@ unschedule_timeout_watcher(struct resolv_ctx *ctx) } static void fd_event_add(struct resolv_ctx *ctx, int s); -static void fd_event_write(struct resolv_ctx *ctx, int s); static void fd_event_close(struct resolv_ctx *ctx, int s); /* @@ -216,11 +215,6 @@ fd_event(void *data, int s, int fd_read, int fd_write) return; } - /* If ares needs to write to a descriptor */ - if (fd_write == 1) { - fd_event_write(ctx, s); - } - /* Are we already watching this file descriptor? */ watch = ctx->fds; while (watch) { @@ -260,17 +254,6 @@ fd_event_add(struct resolv_ctx *ctx, int s) } static void -fd_event_write(struct resolv_ctx *ctx, int s) -{ - if (ctx->channel == NULL) { - DEBUG(1, ("Invalid ares channel - this is likely a bug\n")); - return; - } - /* do not allow any read. */ - ares_process_fd(ctx->channel, ARES_SOCKET_BAD, s); -} - -static void fd_event_close(struct resolv_ctx *ctx, int s) { struct fd_watch *watch; |