Revise ECORE_TIMER handling codes. 59/48159/2
authorSung-jae Park <nicesj.park@samsung.com>
Tue, 15 Sep 2015 08:33:47 +0000 (17:33 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Tue, 15 Sep 2015 08:40:39 +0000 (17:40 +0900)
Change-Id: Id3f8a565250d3bab1cf71363002c9d822cc14428

tg-engine-service/mtprotocol/binlog.c
tg-engine-service/mtprotocol/tgl-net.c
tg-engine-service/mtprotocol/tgl-timers.c
tg-engine-service/mtprotocol/tgl.c

index 2257ab7..bf7ee01 100644 (file)
@@ -1516,7 +1516,7 @@ static void replay_log_event(struct tgl_state *TLS)
        assert(ok >= 0);
 
        assert(in_ptr == in_end);
-       binlog_pos +=(in_ptr - rptr) * 4;
+       binlog_pos += (in_ptr - rptr) * 4;
        rptr = in_ptr;
 }
 
index 118d14d..06cca78 100644 (file)
@@ -94,6 +94,13 @@ static Eina_Bool write_call(void* data)
 
        FD_SET(c->fd, &writeset);
        select(c->fd + 1, NULL, &writeset, NULL, NULL);
+
+       /**
+        * conn_try_write can create write_ev timer again.
+        * So we have to clear the c->write_ev before call it.
+        */
+       c->write_ev = NULL;
+
        conn_try_write(c);
        return ECORE_CALLBACK_CANCEL;
 }
@@ -120,6 +127,7 @@ Eina_Bool ping_alarm(void *arg)
        } else {
                start_ping_timer(c);
        }
+       c->ping_ev = NULL;
        return ECORE_CALLBACK_CANCEL;
 }
 
@@ -133,6 +141,10 @@ static void stop_ping_timer(struct connection *c)
 
 static void start_ping_timer(struct connection *c)
 {
+       if (c->ping_ev) {
+               return;
+       }
+
        c->ping_ev = ecore_timer_add(PING_TIMEOUT, ping_alarm, c);
 }
 
@@ -141,8 +153,11 @@ static void restart_connection(struct connection *c);
 Eina_Bool fail_alarm(void *arg)
 {
        struct connection *c = arg;
+
        c->in_fail_timer = 0;
        restart_connection(c);
+
+       c->fail_ev = NULL;
        return ECORE_CALLBACK_CANCEL;
 }
 
@@ -191,7 +206,6 @@ int tgln_write_out(struct connection *c, const void *_data, int len)
 #else
                if(c->write_ev) {
                        ecore_timer_del(c->write_ev);
-                       c->write_ev = NULL;
                }
                c->write_ev = ecore_timer_add(0.000001, write_call, c);
 #endif
@@ -348,7 +362,6 @@ void conn_try_write(void *arg)
 #else
                if(c->write_ev) {
                        ecore_timer_del(c->write_ev);
-                       c->write_ev = NULL;
                }
                c->write_ev = ecore_timer_add(0.000001, write_call, c);
 #endif
@@ -417,7 +430,6 @@ static Eina_Bool read_timer_alarm(void* arg)
        struct connection *c = arg;
        if(c->read_ev) {
                ecore_main_fd_handler_del(c->read_ev);
-               c->read_ev = NULL;
        }
        c->read_ev = ecore_main_fd_handler_add(c->fd, ECORE_FD_READ, conn_try_read, c, NULL,NULL);
        return ECORE_CALLBACK_CANCEL;
index bebeb4d..5188a4b 100644 (file)
@@ -57,7 +57,7 @@ struct tgl_timer *tgl_timer_alloc(struct tgl_state *TLS, void (*cb)(struct tgl_s
 
 void tgl_timer_insert(struct tgl_timer *t, double p)
 {
-       if (p <= 0) {
+       if (p < 0) {
                p = 0.000001;
        }
        struct timer_context *tc = (struct timer_context *)t;
@@ -85,6 +85,7 @@ void tgl_timer_free(struct tgl_timer *t)
                // Something goes wrong, tgl_timer_delete is not called before.
                // Exceptional cases.
                ecore_timer_del(tc->handler);
+               tc->handler = NULL;
        }
        free(tc->cbdata);
        free(tc);
index 2823b88..22669b5 100644 (file)
@@ -62,9 +62,11 @@ void tgl_init(struct tgl_state *TLS)
 {
        assert(TLS->timer_methods);
        assert(TLS->net_methods);
+
        if (!TLS->callback.create_print_name) {
                TLS->callback.create_print_name = tgls_default_create_print_name;
        }
+
        if (!TLS->temp_key_expire_time) {
                TLS->temp_key_expire_time = 100000;
        }