]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Avoid free'ing a filtered RPC message in the server
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 28 Jun 2011 16:46:15 +0000 (17:46 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 29 Jun 2011 10:08:59 +0000 (11:08 +0100)
When a filter steals an RPC message, that message must
not be freed, except by the filter code itself

* src/rpc/virnetserverclient.c: Don't free stolen RPC
  messages

src/rpc/virnetserverclient.c

index 327b121fafbf6e52fbf31f5779d14fbe6aabfd34..57a3446d39ef409976b486cededfce38bd39fb8d 100644 (file)
@@ -723,13 +723,17 @@ readmore:
         filter = client->filters;
         while (filter) {
             int ret = filter->func(client, msg, filter->opaque);
-            if (ret < 0 || ret > 0) {
+            if (ret < 0) {
                 virNetMessageFree(msg);
                 msg = NULL;
                 if (ret < 0)
                     client->wantClose = true;
                 break;
             }
+            if (ret > 0) {
+                msg = NULL;
+                break;
+            }
 
             filter = filter->next;
         }