|
|
|
@ -403,6 +403,10 @@ static void unref_by(grpc_fd* fd, int n) { |
|
|
|
|
static void fd_global_init(void) { gpr_mu_init(&fd_freelist_mu); } |
|
|
|
|
|
|
|
|
|
static void fd_global_shutdown(void) { |
|
|
|
|
// TODO(guantaol): We don't have a reasonable explanation about this
|
|
|
|
|
// lock()/unlock() pattern. It can be a valid barrier if there is at most one
|
|
|
|
|
// pending lock() at this point. Otherwise, there is still a possibility of
|
|
|
|
|
// use-after-free race. Need to reason about the code and/or clean it up.
|
|
|
|
|
gpr_mu_lock(&fd_freelist_mu); |
|
|
|
|
gpr_mu_unlock(&fd_freelist_mu); |
|
|
|
|
while (fd_freelist != nullptr) { |
|
|
|
|