81bda851db
select/poll, and therefore with pthreads. I doubt there is any way to make this 100% semantically identical to the way it behaves in unthreaded programs with blocking reads, but the solution here should do the right thing for all reasonable usage patterns. The basic idea is to schedule a callout for the read timeout when a select/poll is done. When the callout fires, it ends the select if it is still in progress, or marks the state as "timed out" if the select has already ended for some other reason. Additional logic in bpfread then does the right thing in the case where the timeout has fired. Note, I co-opted the bd_state member of the bpf_d structure. It has been present in the structure since the initial import of 4.4-lite, but as far as I can tell it has never been used. PR: kern/22063 and bin/31649 MFC after: 3 days |
||
---|---|---|
.. | ||
bpf_compat.h | ||
bpf_filter.c | ||
bpf.c | ||
bpf.h | ||
bpfdesc.h | ||
bridge.c | ||
bridge.h | ||
bsd_comp.c | ||
ethernet.h | ||
fddi.h | ||
if_arc.h | ||
if_arp.h | ||
if_atm.h | ||
if_atmsubr.c | ||
if_disc.c | ||
if_dl.h | ||
if_ef.c | ||
if_ethersubr.c | ||
if_faith.c | ||
if_fddisubr.c | ||
if_gif.c | ||
if_gif.h | ||
if_ieee80211.h | ||
if_iso88025subr.c | ||
if_llc.h | ||
if_loop.c | ||
if_media.c | ||
if_media.h | ||
if_mib.c | ||
if_mib.h | ||
if_ppp.c | ||
if_ppp.h | ||
if_pppvar.h | ||
if_sl.c | ||
if_slvar.h | ||
if_sppp.h | ||
if_spppsubr.c | ||
if_stf.c | ||
if_stf.h | ||
if_tap.c | ||
if_tap.h | ||
if_tapvar.h | ||
if_tun.c | ||
if_tun.h | ||
if_tunvar.h | ||
if_types.h | ||
if_var.h | ||
if_vlan_var.h | ||
if_vlan.c | ||
if.c | ||
if.h | ||
intrq.c | ||
intrq.h | ||
iso88025.h | ||
net_osdep.c | ||
net_osdep.h | ||
netisr.h | ||
pfil.c | ||
pfil.h | ||
pfkeyv2.h | ||
ppp_comp.h | ||
ppp_deflate.c | ||
ppp_defs.h | ||
ppp_tty.c | ||
radix.c | ||
radix.h | ||
raw_cb.c | ||
raw_cb.h | ||
raw_usrreq.c | ||
route.c | ||
route.h | ||
rtsock.c | ||
slcompress.c | ||
slcompress.h | ||
slip.h | ||
zlib.c | ||
zlib.h |