malamute icon indicating copy to clipboard operation
malamute copied to clipboard

malamute broker crashes if 2 clients connect with same address. Patch included

Open githubposter12 opened this issue 6 years ago • 1 comments

Malamute cores if 2 clients connect with the same address instead of expiring the older client. Here is patch. Test case for crash is below. Thanks.

diff --git a/src/mlm_server.c b/src/mlm_server.c
index f2f6cd2..597820c 100644
--- a/src/mlm_server.c
+++ b/src/mlm_server.c
@@ -714,7 +714,7 @@ client_expired (client_t *self)
 static void
 client_closed_connection (client_t *self)
 {
-    if (*self->address)
+    if (self->address)
         zsys_info ("client %u address='%s' - closed connection", self->unique_id, self->address);
 }
#include <malamute.h>

int main (int argc, char *argv [])
{
	int rc=0;
    //  Let's start a new Malamute broker
    zactor_t *broker = zactor_new (mlm_server, NULL);

    //  Switch on verbose tracing... this gets a little overwhelming so you
    //  can comment or delete this when you're bored with it:
    zsock_send (broker, "s", "VERBOSE");

   zstr_sendx (broker, "BIND", "tcp://*:12345", NULL);

    mlm_client_t *client1 = mlm_client_new ();
    assert (client1);
    rc = mlm_client_connect (client1, "tcp://127.0.0.1:12345", 1000, "client");
    assert (rc == 0);

    mlm_client_t *client2 = mlm_client_new ();
    assert (client2);
    rc = mlm_client_connect (client2, "tcp://127.0.0.1:12345", 1000, "client");
    assert (rc == 0);

    mlm_client_destroy(&client1);
    mlm_client_destroy(&client2);
    zactor_destroy(&broker);
    return 0;
}

githubposter12 avatar Oct 31 '18 11:10 githubposter12

Hi, thanks for posting the fix. Would you mind to send a PullRequest (https://yangsu.github.io/pull-request-tutorial/). You can make this simple fix via web editor on GitHub, so no worries about git CLI. That way we can run CI, merge it and you'll be noted in a list of contributors :-)

vyskocilm avatar Oct 31 '18 12:10 vyskocilm