Allow to drop the first element of the send queue
In case we're in disconnected state, allow the user to drop the first element of the send queue, even if it was already in progress to be written. Before this patch, the first element could not be retrieved at all, even after a disconnect. Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
This commit is contained in:
@@ -1435,6 +1435,7 @@ char *xmpp_conn_send_queue_drop_element(xmpp_conn_t *conn,
|
|||||||
xmpp_queue_element_t which)
|
xmpp_queue_element_t which)
|
||||||
{
|
{
|
||||||
xmpp_send_queue_t *t;
|
xmpp_send_queue_t *t;
|
||||||
|
int disconnected = conn->state == XMPP_STATE_DISCONNECTED;
|
||||||
|
|
||||||
/* Fast return paths */
|
/* Fast return paths */
|
||||||
/* empty queue */
|
/* empty queue */
|
||||||
@@ -1443,7 +1444,7 @@ char *xmpp_conn_send_queue_drop_element(xmpp_conn_t *conn,
|
|||||||
/* one element in queue */
|
/* one element in queue */
|
||||||
if (conn->send_queue_head == conn->send_queue_tail) {
|
if (conn->send_queue_head == conn->send_queue_tail) {
|
||||||
/* head is already sent out partially */
|
/* head is already sent out partially */
|
||||||
if (conn->send_queue_head->wip)
|
if (conn->send_queue_head->wip && !disconnected)
|
||||||
return NULL;
|
return NULL;
|
||||||
/* the element is no USER element */
|
/* the element is no USER element */
|
||||||
if (conn->send_queue_head->owner != XMPP_QUEUE_USER)
|
if (conn->send_queue_head->owner != XMPP_QUEUE_USER)
|
||||||
@@ -1467,7 +1468,7 @@ char *xmpp_conn_send_queue_drop_element(xmpp_conn_t *conn,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* head is already sent out partially */
|
/* head is already sent out partially */
|
||||||
if (t == conn->send_queue_head && t->wip)
|
if (t == conn->send_queue_head && t->wip && !disconnected)
|
||||||
t = t->next;
|
t = t->next;
|
||||||
|
|
||||||
/* search forward to find the first USER element */
|
/* search forward to find the first USER element */
|
||||||
|
|||||||
Reference in New Issue
Block a user