diff --git a/src/utils/daos_autotest.c b/src/utils/daos_autotest.c index 5d9f591b7fa..810799d87bd 100644 --- a/src/utils/daos_autotest.c +++ b/src/utils/daos_autotest.c @@ -1,6 +1,6 @@ /** * (C) Copyright 2020-2022 Intel Corporation. - * (C) Copyright 2025 Hewlett Packard Enterprise Development LP + * (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP * * SPDX-License-Identifier: BSD-2-Clause-Patent */ @@ -498,6 +498,22 @@ kv_put(daos_handle_t oh, daos_size_t size) } } + /* Poll failure: evp is stale, do not dereference it */ + if (rc < 0) { + D_ERROR("DAOS-18859 kv_put: daos_eq_poll " + "returned " DF_RC ", evp is stale" + " — breaking out safely" + " (fix applied)\n", + DP_RC(rc)); + fprintf(stderr, + "DAOS-18859 kv_put:" + " daos_eq_poll returned %d, evp is" + " stale — breaking out safely" + " (fix applied)\n", + rc); + break; + } + /** Check if completed operation failed */ if (evp->ev_error != DER_SUCCESS) { rc = evp->ev_error; @@ -551,8 +567,11 @@ kv_put(daos_handle_t oh, daos_size_t size) num_events = daos_eq_query(eq, DAOS_EQR_ALL, 0, NULL); while (1) { eq_rc = daos_eq_poll(eq, 1, DAOS_EQ_NOWAIT, 1, &evp); - if (eq_rc > 0) + if (eq_rc > 0) { completions += eq_rc; + if (rc == 0) + rc = evp->ev_error; + } if (eq_rc < 0) { rc = eq_rc; break; @@ -638,6 +657,22 @@ kv_get(daos_handle_t oh, daos_size_t size) } } + /* Poll failure: evp is stale, do not dereference it */ + if (rc < 0) { + D_ERROR("DAOS-18859 kv_get: daos_eq_poll " + "returned " DF_RC ", evp is stale" + " — breaking out safely" + " (fix applied)\n", + DP_RC(rc)); + fprintf(stderr, + "DAOS-18859 kv_get:" + " daos_eq_poll returned %d, evp is" + " stale — breaking out safely" + " (fix applied)\n", + rc); + break; + } + /** Check if completed operation failed */ if (evp->ev_error != DER_SUCCESS) { rc = evp->ev_error;