Changeset 1115

Show
Ignore:
Timestamp:
12/29/07 14:38:11 (10 months ago)
Author:
ahu
Message:

fix subtle bug where waiting for an fd to become writable immediately after waiting for it to be readable would return immediate success, which hurt TCP queries

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pdns/pdns/epollmplexer.cc

    r1073 r1115  
    113113   
    114114  if(ret < 0 && errno!=EINTR) 
    115     throw FDMultiplexerException("select returned error: "+stringerror()); 
     115    throw FDMultiplexerException("epoll returned error: "+stringerror()); 
    116116 
    117117  if(ret < 1) // thanks AB! 
     
    119119 
    120120  d_inrun=true; 
    121  
    122121  for(int n=0; n < ret; ++n) { 
    123122    d_iter=d_readCallbacks.find(d_eevents[n].data.fd); 
     
    125124    if(d_iter != d_readCallbacks.end()) { 
    126125      d_iter->second.d_callback(d_iter->first, d_iter->second.d_parameter); 
     126      continue; // so we don't refind ourselves as writable! 
    127127    } 
    128  
    129128    d_iter=d_writeCallbacks.find(d_eevents[n].data.fd); 
    130129     
     
    133132    } 
    134133  } 
    135  
    136134  d_inrun=false; 
    137135  return 0; 
  • trunk/pdns/pdns/kqueuemplexer.cc

    r1059 r1115  
    108108    if(d_iter != d_readCallbacks.end()) { 
    109109      d_iter->second.d_callback(d_iter->first, d_iter->second.d_parameter); 
     110      continue; // so we don't find ourselves as writable again 
    110111    } 
    111112 
  • trunk/pdns/pdns/portsmplexer.cc

    r1093 r1115  
    118118                        POLLIN, 0) < 0) 
    119119        throw FDMultiplexerException("Unable to add fd back to ports (read): "+stringerror()); 
     120      continue; // so we don't find ourselves as writable again 
    120121    } 
    121122 
  • trunk/pdns/pdns/selectmplexer.cc

    r1059 r1115  
    8282    if(FD_ISSET(d_iter->first, &readfds)) { 
    8383      d_iter->second.d_callback(d_iter->first, d_iter->second.d_parameter); 
     84      continue;  // so we don't refind ourselves as writable 
    8485    } 
    8586  }