unittest/nvme: initialize mutex for portability

For correct behaviour, pthread_mutex must be initialized before use
and destroyed before the memory is zeroed. Add mutex initialization
and destroy calls to test_nvme_init_controllers.

Tested with a pthreads library that contains debugging code to
check the mutex state.

Signed-off-by: Nick Connolly <nick.connolly@mayadata.io>
Change-Id: I9a0509bee176940e1aa46bd5de4c6ad396b787e1
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6152
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
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>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Nick Connolly 2021-01-28 17:52:14 +00:00 committed by Tomasz Zawadzki
parent b6748a41eb
commit ed1dcc1c50

View File

@ -372,6 +372,7 @@ test_nvme_init_controllers(void)
SPDK_CU_ASSERT_FATAL(ctrlr != NULL);
ctrlr->trid.trtype = SPDK_NVME_TRANSPORT_PCIE;
CU_ASSERT(pthread_mutexattr_init(&attr) == 0);
CU_ASSERT(pthread_mutex_init(&ctrlr->ctrlr_lock, &attr) == 0);
CU_ASSERT(pthread_mutex_init(&test_driver.lock, &attr) == 0);
TAILQ_INIT(&test_driver.shared_attached_ctrlrs);
@ -409,10 +410,16 @@ test_nvme_init_controllers(void)
CU_ASSERT(TAILQ_FIRST(&g_spdk_nvme_driver->shared_attached_ctrlrs) == ctrlr);
TAILQ_REMOVE(&g_spdk_nvme_driver->shared_attached_ctrlrs, ctrlr, tailq);
/*
* Reset to initial state
*/
CU_ASSERT(pthread_mutex_destroy(&ctrlr->ctrlr_lock) == 0);
memset(ctrlr, 0, sizeof(struct spdk_nvme_ctrlr));
CU_ASSERT(pthread_mutex_init(&ctrlr->ctrlr_lock, &attr) == 0);
/*
* Non-PCIe controllers should be added to the per-process list, not the shared list.
*/
memset(ctrlr, 0, sizeof(struct spdk_nvme_ctrlr));
ctrlr->trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
probe_ctx = test_nvme_init_get_probe_ctx();
TAILQ_INSERT_TAIL(&probe_ctx->init_ctrlrs, ctrlr, tailq);
@ -424,6 +431,7 @@ test_nvme_init_controllers(void)
CU_ASSERT(TAILQ_EMPTY(&g_spdk_nvme_driver->shared_attached_ctrlrs));
CU_ASSERT(TAILQ_FIRST(&g_nvme_attached_ctrlrs) == ctrlr);
TAILQ_REMOVE(&g_nvme_attached_ctrlrs, ctrlr, tailq);
CU_ASSERT(pthread_mutex_destroy(&ctrlr->ctrlr_lock) == 0);
free(ctrlr);
CU_ASSERT(TAILQ_EMPTY(&g_nvme_attached_ctrlrs));