Changeset 120eedd in code


Ignore:
Timestamp:
Jun 17, 2014, 11:46:35 AM (11 years ago)
Author:
Mike Belopuhov <mike@…>
Branches:
master
Children:
e68221b
Parents:
9440414
Message:

prevent icbd_drop from freeing an icb session while dns is in progress

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • dns.c

    r9440414 r120eedd  
    5656                icbd_log(is, LOG_WARNING, "dns resolution failed: %s",
    5757                    gai_strerror(ar->ar_gai_errno));
     58
     59        if (ISSETF(is->flags, ICB_SF_PENDINGDROP)) {
     60                free(is);
     61                return;
     62        }
     63
     64        CLRF(is->flags, ICB_SF_DNSINPROGRESS);
    5865}
    5966
     
    6572        struct addrinfo hints;
    6673
     74        if (ISSETF(is->flags, ICB_SF_PENDINGDROP)) {
     75                free(is);
     76                return;
     77        }
     78
    6779        if (ar->ar_gai_errno == 0) {
    6880                icbd_log(is, LOG_DEBUG, "reverse dns resolved %s to %s",
     
    7385                as = getaddrinfo_async(is->hostname, NULL, &hints, NULL);
    7486                event_asr_run(as, dns_done_host, is);
    75         } else
     87        } else {
    7688                icbd_log(is, LOG_WARNING, "reverse dns resolution failed: %s",
    7789                    gai_strerror(ar->ar_gai_errno));
     90                CLRF(is->flags, ICB_SF_DNSINPROGRESS);
     91        }
    7892}
    7993
     
    86100                return;
    87101
     102        SETF(is->flags, ICB_SF_DNSINPROGRESS);
     103
    88104        if (verbose)
    89105                icbd_log(is, LOG_DEBUG, "resolving: %s", is->host);
  • icb.h

    r9440414 r120eedd  
    9090#define CLRF(t, f)               ((t) &= ~(f))
    9191#define ISSETF(t, f)             ((t) & (f))
    92 #define ICB_SF_PROTOSENT         0x01
    93 #define ICB_SF_LOGGEDIN          0x02
    94 #define ICB_SF_NOGROUP           0x08
    95 #define ICB_SF_NOBEEP            0x10
    96 #define ICB_SF_NOBEEP2           0x20
     92#define ICB_SF_PROTOSENT         0x0001
     93#define ICB_SF_LOGGEDIN          0x0002
     94#define ICB_SF_NOGROUP           0x0008
     95#define ICB_SF_NOBEEP            0x0010
     96#define ICB_SF_NOBEEP2           0x0020
     97
     98#define ICB_SF_DNSINPROGRESS     0x1000
     99#define ICB_SF_PENDINGDROP       0x2000
    97100
    98101        /* in-group linkage */
  • icbd.c

    r9440414 r120eedd  
    420420        (void)close(EVBUFFER_FD(is->bev));
    421421        bufferevent_free(is->bev);
    422         free(is);
     422        if (!ISSETF(is->flags, ICB_SF_DNSINPROGRESS))
     423                free(is);
     424        else
     425                SETF(is->flags, ICB_SF_PENDINGDROP);
    423426}
    424427
Note: See TracChangeset for help on using the changeset viewer.