<div dir="ltr">ack (would be nice to describe the motivation, although I guess it is to avoid code duplication)<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 8, 2013 at 4:06 PM, Yonit Halperin <span dir="ltr"><<a href="mailto:yhalperi@redhat.com" target="_blank">yhalperi@redhat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 server/main_dispatcher.c |  5 +----<br>
 server/reds.c            | 19 ++++++++++++++-----<br>
 server/reds.h            |  4 ++++<br>
 3 files changed, 19 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/server/main_dispatcher.c b/server/main_dispatcher.c<br>
index 8402402..92b0791 100644<br>
--- a/server/main_dispatcher.c<br>
+++ b/server/main_dispatcher.c<br>
@@ -64,10 +64,7 @@ static void main_dispatcher_self_handle_channel_event(<br>
                                                 int event,<br>
                                                 SpiceChannelEventInfo *info)<br>
 {<br>
-    main_dispatcher.core->channel_event(event, info);<br>
-    if (event == SPICE_CHANNEL_EVENT_DISCONNECTED) {<br>
-        free(info);<br>
-    }<br>
+    reds_handle_channel_event(event, info);<br>
 }<br>
<br>
 static void main_dispatcher_handle_channel_event(void *opaque,<br>
diff --git a/server/reds.c b/server/reds.c<br>
index b8db905..a378f80 100644<br>
--- a/server/reds.c<br>
+++ b/server/reds.c<br>
@@ -189,11 +189,20 @@ static ChannelSecurityOptions *find_channel_security(int id)<br>
     return now;<br>
 }<br>
<br>
-static void reds_stream_channel_event(RedsStream *s, int event)<br>
+static void reds_stream_push_channel_event(RedsStream *s, int event)<br>
+{<br>
+    main_dispatcher_channel_event(event, s->info);<br>
+}<br>
+<br>
+void reds_handle_channel_event(int event, SpiceChannelEventInfo *info)<br>
 {<br>
     if (core->base.minor_version < 3 || core->channel_event == NULL)<br>
         return;<br>
-    main_dispatcher_channel_event(event, s->info);<br>
+<br>
+    core->channel_event(event, info);<br>
+    if (event == SPICE_CHANNEL_EVENT_DISCONNECTED) {<br>
+        free(info);<br>
+    }<br>
 }<br>
<br>
 static ssize_t stream_write_cb(RedsStream *s, const void *buf, size_t size)<br>
@@ -1524,7 +1533,7 @@ static void reds_info_new_channel(RedLinkInfo *link, int connection_id)<br>
     link->stream->info->connection_id = connection_id;<br>
     link->stream->info->type = link->link_mess->channel_type;<br>
     link->stream->info->id   = link->link_mess->channel_id;<br>
-    reds_stream_channel_event(link->stream, SPICE_CHANNEL_EVENT_INITIALIZED);<br>
+    reds_stream_push_channel_event(link->stream, SPICE_CHANNEL_EVENT_INITIALIZED);<br>
 }<br>
<br>
 static void reds_send_link_result(RedLinkInfo *link, uint32_t error)<br>
@@ -2845,7 +2854,7 @@ static RedLinkInfo *reds_init_client_connection(int socket)<br>
     getpeername(stream->socket, (struct sockaddr*)(&stream->info->paddr_ext),<br>
                 &stream->info->plen_ext);<br>
<br>
-    reds_stream_channel_event(stream, SPICE_CHANNEL_EVENT_CONNECTED);<br>
+    reds_stream_push_channel_event(stream, SPICE_CHANNEL_EVENT_CONNECTED);<br>
<br>
     openssl_init(link);<br>
<br>
@@ -4573,7 +4582,7 @@ void reds_stream_free(RedsStream *s)<br>
         return;<br>
     }<br>
<br>
-    reds_stream_channel_event(s, SPICE_CHANNEL_EVENT_DISCONNECTED);<br>
+    reds_stream_push_channel_event(s, SPICE_CHANNEL_EVENT_DISCONNECTED);<br>
<br>
 #if HAVE_SASL<br>
     if (s->sasl.conn) {<br>
diff --git a/server/reds.h b/server/reds.h<br>
index 59f13ce..c5c557d 100644<br>
--- a/server/reds.h<br>
+++ b/server/reds.h<br>
@@ -111,11 +111,15 @@ typedef struct RedsMigSpice {<br>
     int sport;<br>
 } RedsMigSpice;<br>
<br>
+/* any thread */<br>
 ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte);<br>
 ssize_t reds_stream_write(RedsStream *s, const void *buf, size_t nbyte);<br>
 ssize_t reds_stream_writev(RedsStream *s, const struct iovec *iov, int iovcnt);<br>
 void reds_stream_free(RedsStream *s);<br>
<br>
+/* main thread only */<br>
+void reds_handle_channel_event(int event, SpiceChannelEventInfo *info);<br>
+<br>
 void reds_disable_mm_timer(void);<br>
 void reds_enable_mm_timer(void);<br>
 void reds_update_mm_timer(uint32_t mm_time);<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.1.4<br>
<br>
_______________________________________________<br>
Spice-devel mailing list<br>
<a href="mailto:Spice-devel@lists.freedesktop.org">Spice-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/spice-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/spice-devel</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br>Marc-André Lureau
</div>