Reviewed and Tested-by: Chandra Shekhar Reddy Potula <chandra@linux.vnet.ibm.com>


On 10/13/16 2:36 PM, archus@linux.vnet.ibm.com wrote:
From: Archana Singh <archus@linux.vnet.ibm.com>

Socket server gets closed for VM's serial console connection if its not readable instead writeable.
This is due to fact that _is_vm_listening_serial(...) only call _test_output if its readable
and not on writeable. Adding libvirt.VIR_STREAM_EVENT_WRITABLE solve the issue.
Also added libvirt.VIR_STREAM_EVENT_HANGUP event so that in case of hangup also
console gets connected.

Signed-off-by: Archana Singh <archus@linux.vnet.ibm.com>
---
 serialconsole.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/serialconsole.py b/serialconsole.py
index 13ef331..725f55d 100644
--- a/serialconsole.py
+++ b/serialconsole.py
@@ -101,7 +101,9 @@ class SocketServer(Process):
             while not is_listening:
                 libvirt.virEventRunDefaultImpl()

-        console.eventAddCallback(libvirt.VIR_STREAM_EVENT_READABLE,
+        console.eventAddCallback(libvirt.VIR_STREAM_EVENT_READABLE |
+                                 libvirt.VIR_STREAM_EVENT_WRITABLE |
+                                 libvirt.VIR_STREAM_EVENT_HANGUP,
                                  _test_output,
                                  None)
         libvirt_loop = threading.Thread(target=_event_loop)
@@ -111,6 +113,7 @@ class SocketServer(Process):
         libvirt_loop.join(1)

         if not libvirt_loop.is_alive():
+            wok_log.error("console libvirt stream is not listening to event")
             console.eventRemoveCallback()
             return True