Spdk/lib
Shuhei Matsumoto e9aec6746a lib/thread: thread_poll() polls until the exiting thread is exited
Extract _spdk_thread_exit() from spdk_thread_exit() and
_spdk_thread_poll() calls _spdk_thread_exit() if the thread is in
the exiting state. spdk_thread_exit() changes to move the state to
the exiting state. The spdk_thread_poll() loop will end after the
thread moves to the exited state because the caller of
spdk_thread_poll() will check if the thread is in the exited state,
and break the loop if true.

If the user does not call spdk_thread_exit() explicitly, the reactor
has to terminate all existing threads at its shutdown. In this case,
multiple threads may have some dependency to release I/O channels or
unregister pollers. So the reactor has the large two loops, the first
loop calls spdk_thread_exit() on all threads, the second loop calls
spdk_thread_destroy() if exited or spdk_thread_poll() otherwise for
each thread until all threads are destroyed.

Besides, change the return value of spdk_thread_exit() to return
always 0. Keep it for ABI compatibility. Change ERRLOG to INFOLOG
for _spdk_thread_exit() because it is called repeatedly now. Remove
the check of I/O reference count from _spdk_thread_exit() because
_free_thread() cannot free I/O channel. Refine the unit test
accordingly.

Fixes issue #1288.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Iee5fb984a96bfac53110fe991dd994ded31dffa4
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1423
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
2020-04-09 13:44:14 +00:00
..
accel make: add a map file for libspdk_accel. 2020-04-03 06:31:46 +00:00
bdev make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
blob lib/blob: assert that md_page is not extent page 2020-04-07 08:37:41 +00:00
blobfs make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
conf make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
env_dpdk ENV_DPDK/VFIO: Increase PCI tear down timeout 2020-04-03 06:31:40 +00:00
env_ocf lib/bdev/ocf: update of ocf library to version 19.06 2019-10-22 17:22:41 +00:00
event lib/thread: thread_poll() polls until the exiting thread is exited 2020-04-09 13:44:14 +00:00
ftl make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
ioat memory.h: move to public headers 2020-03-19 08:50:45 +00:00
iscsi iscsi: Properly size the receive buffer 2020-04-08 06:42:55 +00:00
json make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
jsonrpc make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
log make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
log_rpc make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
lvol lvol: do not refer to blob when create returned error 2020-04-02 07:03:35 +00:00
nbd make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
net make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
notify make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
nvme nvme/tcp: Properly size the receive buffer 2020-04-08 06:42:55 +00:00
nvmf nvmf/tcp: Correctly size the socket receive buffer 2020-04-08 06:42:55 +00:00
reduce make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
rocksdb global: rename copy to accel 2020-02-18 08:05:34 +00:00
rpc make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
rte_vhost make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
scsi make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
sock sock: keep track of removed sockets during call to poll 2020-04-06 07:48:33 +00:00
thread lib/thread: thread_poll() polls until the exiting thread is exited 2020-04-09 13:44:14 +00:00
trace make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
ut_mock make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
util pipe: Simplify the pipe code 2020-03-31 07:59:26 +00:00
vhost lib/thread: thread_poll() polls until the exiting thread is exited 2020-04-09 13:44:14 +00:00
virtio memory.h: move to public headers 2020-03-19 08:50:45 +00:00
vmd make: rev SO versions individually for libraries. 2020-03-18 08:02:30 +00:00
Makefile global: rename copy to accel 2020-02-18 08:05:34 +00:00