(errmsg("pool_pending_message_reset_previous_message: session context is not initialized")));
return;
}
- session_context->previous_message = NULL;
+ session_context->previous_message_exists = false;
}
/*
(errmsg("pool_pending_message_set_previous_message: session context is not initialized")));
return;
}
- session_context->previous_message = message;
+ session_context->previous_message_exists = true;
+ memcpy(&session_context->previous_message, message, sizeof(POOL_PENDING_MESSAGE));
}
/*
- * Get previous message.
+ * Get previous message. This actually returns the address of memory. Do not
+ * try to free using pool_pending_message_free_pending_message().
*/
POOL_PENDING_MESSAGE *pool_pending_message_get_previous_message(void)
{
(errmsg("pool_pending_message_get_previous_message: session context is not initialized")));
return NULL;
}
- return session_context->previous_message;
+ if (session_context->previous_message_exists == false)
+ return NULL;
+
+ return &session_context->previous_message;
}
/*
List *pending_messages;
/*
- * The last pending message. Reset at Ready for query.
+ * The last pending message. Reset at Ready for query. Note that this is
+ * a shallow copy of pending message. Once the are is reset,
+ * previos_message_exists is set to false.
*/
- POOL_PENDING_MESSAGE *previous_message;
+ bool previous_message_exists;
+ POOL_PENDING_MESSAGE previous_message;
/* Protocol major version number */
int major;