fixed ctdb/ib bug at reject event
authorPeter Somogyi <psomogyi@gamax.hu>
Mon, 23 Apr 2007 10:45:14 +0000 (12:45 +0200)
committerPeter Somogyi <psomogyi@gamax.hu>
Mon, 23 Apr 2007 10:45:14 +0000 (12:45 +0200)
reverted my suggestion in debug.c (based on my false error detection)

ib/ibwrapper.c
lib/util/debug.c

index 908d38d58406a7803e4130d6e07ba636d54ac122..5aa2ca9c3c9800f6bfb7ba7766b100b561e6d0ed 100644 (file)
@@ -428,6 +428,7 @@ static void ibw_event_handler_cm(struct event_context *ev,
        rc = rdma_get_cm_event(pctx->cm_channel, &event);
        if (rc) {
                ctx->state = IBWS_ERROR;
+               event = NULL;
                sprintf(ibw_lasterr, "rdma_get_cm_event error %d\n", rc);
                goto error;
        }
@@ -520,9 +521,10 @@ static void ibw_event_handler_cm(struct event_context *ev,
                if (conn) {
                        if ((rc=rdma_ack_cm_event(event)))
                                DEBUG(0, ("reject/rdma_ack_cm_event failed with %d\n", rc));
-                       event = NULL;
-                       pconn = talloc_get_type(conn->internal, struct ibw_conn_priv);
-                       ibw_conn_priv_destruct(pconn);
+                       event = NULL; /* not to touch cma_id or conn */
+                       conn->state = IBWC_ERROR;
+                       /* it should free the conn */
+                       pctx->connstate_func(NULL, conn);
                }
                goto error;
 
@@ -556,22 +558,26 @@ static void ibw_event_handler_cm(struct event_context *ev,
 
        return;
 error:
-       if (event!=NULL && (rc=rdma_ack_cm_event(event))) {
-               DEBUG(0, ("rdma_ack_cm_event failed with %d\n", rc));
-       }
-
        DEBUG(0, ("cm event handler: %s", ibw_lasterr));
 
-       if (cma_id!=pctx->cm_id) {
-               conn = talloc_get_type(cma_id->context, struct ibw_conn);
-               if (conn) {
-                       conn->state = IBWC_ERROR;
-                       pctx->connstate_func(NULL, conn);
+       if (event!=NULL) {
+               if (cma_id!=NULL && cma_id!=pctx->cm_id) {
+                       conn = talloc_get_type(cma_id->context, struct ibw_conn);
+                       if (conn) {
+                               conn->state = IBWC_ERROR;
+                               pctx->connstate_func(NULL, conn);
+                       }
+               } else {
+                       ctx->state = IBWS_ERROR;
+                       pctx->connstate_func(ctx, NULL);
+               }
+
+               if ((rc=rdma_ack_cm_event(event))!=0) {
+                       DEBUG(0, ("rdma_ack_cm_event failed with %d\n", rc));
                }
-       } else {
-               ctx->state = IBWS_ERROR;
-               pctx->connstate_func(ctx, NULL);
        }
+
+       return;
 }
 
 static void ibw_event_handler_verbs(struct event_context *ev,
index c9c6974964474c986d3d30a86fdd298df90f1c2f..a048ed807ed02b4ac0ef9b680a12866e251d534f 100644 (file)
@@ -30,12 +30,12 @@ void do_debug(const char *format, ...)
        char *s = NULL;
 
        va_start(ap, format);
-       s = talloc_vasprintf(NULL, format, ap);
+       vasprintf(&s, format, ap);
        va_end(ap);
 
        gettimeofday(&tm, NULL);
        printf("%-8.8d.%-6.6d [%d]: %s", (int)tm.tv_sec, (int)tm.tv_usec,
               (int)getpid(), s);
        fflush(stdout);
-       talloc_free(s);
+       free(s);
 }