diff options
author | Craig Tiller <craig.tiller@gmail.com> | 2015-09-29 11:19:06 -0700 |
---|---|---|
committer | Craig Tiller <craig.tiller@gmail.com> | 2015-09-29 11:19:06 -0700 |
commit | 084c8089a4ca3f9e1a5516751a9562b902926f3b (patch) | |
tree | e70c233ef621ab10113ce9c6ca62d293defa08af /src/core/iomgr/pollset_windows.h | |
parent | 3ccd9613dab3c4de1e679ef2fc8b01ac24d4fbc0 (diff) |
Threading fixes
- single global mutex (simpler, easier to make correct for now)
- properly flag kick state for workers to avoid missing wakeups (if
signal is called before wait on the cv)
Diffstat (limited to 'src/core/iomgr/pollset_windows.h')
-rw-r--r-- | src/core/iomgr/pollset_windows.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/core/iomgr/pollset_windows.h b/src/core/iomgr/pollset_windows.h index 55f87aca72..65ba80619b 100644 --- a/src/core/iomgr/pollset_windows.h +++ b/src/core/iomgr/pollset_windows.h @@ -54,20 +54,26 @@ typedef struct grpc_pollset_worker_link { struct grpc_pollset_worker *prev; } grpc_pollset_worker_link; +struct grpc_pollset; +typedef struct grpc_pollset grpc_pollset; + typedef struct grpc_pollset_worker { gpr_cv cv; + int kicked; + struct grpc_pollset *pollset; grpc_pollset_worker_link links[GRPC_POLLSET_WORKER_LINK_TYPES]; } grpc_pollset_worker; -typedef struct grpc_pollset { - gpr_mu mu; +struct grpc_pollset { int shutting_down; int kicked_without_pollers; int is_iocp_worker; grpc_pollset_worker root_worker; grpc_closure *on_shutdown; -} grpc_pollset; +}; + +extern gpr_mu grpc_polling_mu; -#define GRPC_POLLSET_MU(pollset) (&(pollset)->mu) +#define GRPC_POLLSET_MU(pollset) (&grpc_polling_mu) #endif /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_WINDOWS_H */ |