diff --git a/src/common/slurmdbd_defs.c b/src/common/slurmdbd_defs.c
index a29c5b9f2b51b54a0d6f73474c5b644157c7df30..458c52e7181a0704aab7f396fc2d5d064e062c25 100644
--- a/src/common/slurmdbd_defs.c
+++ b/src/common/slurmdbd_defs.c
@@ -1666,13 +1666,19 @@ static int _handle_mult_rc_ret(uint16_t rpc_version, int read_timeout)
 		if (agent_list) {
 			ListIterator itr =
 				list_iterator_create(list_msg->my_list);
-			while((out_buf = list_next(itr))) {
-				if((rc = _unpack_return_code(
+			while ((out_buf = list_next(itr))) {
+				Buf b;
+				if ((rc = _unpack_return_code(
 					    rpc_version, out_buf))
 				    != SLURM_SUCCESS)
 					break;
 
-				free_buf(list_dequeue(agent_list));
+				if ((b = list_dequeue(agent_list))) {
+					free_buf(b);
+				} else {
+					error("slurmdbd: DBD_GOT_MULT_MSG "
+					      "unpack message error");
+				}
 			}
 			list_iterator_destroy(itr);
 		}