You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
commit ccff9ed69d0b26d33ce9cac8e83dab535b64d627 |
|
Author: Thomas Markwalder <tmark@isc.org> |
|
Date: Tue Dec 5 15:12:34 2017 -0500 |
|
|
|
[46767] Plugged a socket descriptor leak in OMAPI |
|
|
|
If disconnect is triggered by the reader closing the socket, while there |
|
is data left to write, the socket would be orphaned. |
|
|
|
omapip/buffer.c |
|
omapi_connection_writea() - added logic to recall disconnect once |
|
pending data has been written |
|
|
|
omapip/message.c |
|
Removed static declaration from omapi_message_unregister so you can |
|
actually compile when DEBUG_PROTOCOL is defined. |
|
|
|
Added a release note |
|
|
|
diff --git a/omapip/buffer.c b/omapip/buffer.c |
|
index 6e0621b..a21f0a8 100644 |
|
--- a/omapip/buffer.c |
|
+++ b/omapip/buffer.c |
|
@@ -565,6 +565,15 @@ isc_result_t omapi_connection_writer (omapi_object_t *h) |
|
omapi_buffer_dereference (&buffer, MDL); |
|
} |
|
} |
|
+ |
|
+ /* If we had data left to write when we're told to disconnect, |
|
+ * we need recall disconnect, now that we're done writing. |
|
+ * See rt46767. */ |
|
+ if (c->out_bytes == 0 && c->state == omapi_connection_disconnecting) { |
|
+ omapi_disconnect (h, 1); |
|
+ return ISC_R_SHUTTINGDOWN; |
|
+ } |
|
+ |
|
return ISC_R_SUCCESS; |
|
} |
|
|
|
diff --git a/omapip/message.c b/omapip/message.c |
|
index ee15d82..37abbd2 100644 |
|
--- a/omapip/message.c |
|
+++ b/omapip/message.c |
|
@@ -339,7 +339,7 @@ isc_result_t omapi_message_unregister (omapi_object_t *mo) |
|
} |
|
|
|
#ifdef DEBUG_PROTOCOL |
|
-static const char *omapi_message_op_name(int op) { |
|
+const char *omapi_message_op_name(int op) { |
|
switch (op) { |
|
case OMAPI_OP_OPEN: return "OMAPI_OP_OPEN"; |
|
case OMAPI_OP_REFRESH: return "OMAPI_OP_REFRESH";
|
|
|