X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/39236c6e673c41db228275375ab7fdb0f837b292..a39ff7e25e19b3a8c3020042a3872ca9ec9659f1:/bsd/net/flowadv.c?ds=sidebyside diff --git a/bsd/net/flowadv.c b/bsd/net/flowadv.c index 99e4d2cad..214c5c715 100644 --- a/bsd/net/flowadv.c +++ b/bsd/net/flowadv.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 Apple Inc. All rights reserved. + * Copyright (c) 2012-2017 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -179,12 +179,24 @@ flowadv_add(struct flowadv_fclist *fcl) lck_mtx_unlock(&fadv_lock); } +void +flowadv_add_entry(struct flowadv_fcentry *fce) { + lck_mtx_lock_spin(&fadv_lock); + STAILQ_INSERT_HEAD(&fadv_list, fce, fce_link); + VERIFY(!STAILQ_EMPTY(&fadv_list)); + + if (!fadv_active && fadv_thread != THREAD_NULL) + wakeup_one((caddr_t)&fadv_list); + + lck_mtx_unlock(&fadv_lock); +} + static int flowadv_thread_cont(int err) { #pragma unused(err) for (;;) { - lck_mtx_assert(&fadv_lock, LCK_MTX_ASSERT_OWNED); + LCK_MTX_ASSERT(&fadv_lock, LCK_MTX_ASSERT_OWNED); while (STAILQ_EMPTY(&fadv_list)) { VERIFY(!fadv_active); (void) msleep0(&fadv_list, &fadv_lock, (PSOCK | PSPIN), @@ -203,7 +215,7 @@ flowadv_thread_cont(int err) STAILQ_NEXT(fce, fce_link) = NULL; lck_mtx_unlock(&fadv_lock); - switch (fce->fce_flowsrc) { + switch (fce->fce_flowsrc_type) { case FLOWSRC_INPCB: inp_flowadv(fce->fce_flowid); break; @@ -212,6 +224,7 @@ flowadv_thread_cont(int err) ifnet_flowadv(fce->fce_flowid); break; + case FLOWSRC_PF: default: break;