diff options
author | Patrick McHardy <kaber@trash.net> | 2010-09-14 23:04:57 +0200 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2010-09-15 00:05:52 +0200 |
commit | 8f51a775edf59e11511afb22da837488d734816c (patch) | |
tree | f54437f21b7da0c5d8f4d0efd80f17fd87c87e3e /src | |
parent | fbe580f9c998443806ed45fdc719310d3ec4ab64 (diff) |
cc: don't destroy setup_timer before call destruction
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/cc.c | 28 |
1 files changed, 14 insertions, 14 deletions
@@ -503,6 +503,8 @@ static void dect_call_disconnect_uplane(const struct dect_handle *dh, cc_debug(call, "U-Plane disconnected"); } +static void dect_cc_setup_timer(struct dect_handle *dh, struct dect_timer *timer); + struct dect_call *dect_call_alloc(const struct dect_handle *dh) { struct dect_call *call; @@ -514,6 +516,7 @@ struct dect_call *dect_call_alloc(const struct dect_handle *dh) call->setup_timer = dect_timer_alloc(dh); if (call->setup_timer == NULL) goto err2; + dect_timer_setup(call->setup_timer, dect_cc_setup_timer, call); call->state = DECT_CC_NULL; return call; @@ -645,9 +648,12 @@ int dect_mncc_setup_req(struct dect_handle *dh, struct dect_call *call, if (dect_cc_send_msg(dh, call, &cc_setup_msg_desc, &msg.common, DECT_CC_SETUP) < 0) goto err2; - call->state = DECT_CC_CALL_PRESENT; - dect_timer_setup(call->setup_timer, dect_cc_setup_timer, call); + if (dh->mode == DECT_MODE_FP) + call->state = DECT_CC_CALL_PRESENT; + else + call->state = DECT_CC_CALL_INITIATED; + dect_timer_start(dh, call->setup_timer, DECT_CC_SETUP_TIMEOUT); return 0; @@ -1148,11 +1154,8 @@ static void dect_cc_rcv_alerting(struct dect_handle *dh, struct dect_call *call, if (dect_parse_sfmt_msg(dh, &cc_alerting_msg_desc, &msg.common, mb) < 0) return; - if (call->setup_timer != NULL) { + if (dect_timer_running(call->setup_timer)) dect_timer_stop(dh, call->setup_timer); - dect_timer_free(dh, call->setup_timer); - call->setup_timer = NULL; - } dect_mncc_alert_ind(dh, call, &msg); dect_msg_free(dh, &cc_alerting_msg_desc, &msg.common); @@ -1194,11 +1197,8 @@ static void dect_cc_rcv_call_proc(struct dect_handle *dh, struct dect_call *call if (dect_parse_sfmt_msg(dh, &cc_call_proc_msg_desc, &msg.common, mb) < 0) return; - if (call->setup_timer != NULL) { + if (dect_timer_running(call->setup_timer)) dect_timer_stop(dh, call->setup_timer); - dect_timer_free(dh, call->setup_timer); - call->setup_timer = NULL; - } dect_mncc_call_proc_ind(dh, call, &msg); dect_msg_free(dh, &cc_call_proc_msg_desc, &msg.common); @@ -1245,11 +1245,8 @@ static void dect_cc_rcv_connect(struct dect_handle *dh, struct dect_call *call, if (dect_parse_sfmt_msg(dh, &cc_connect_msg_desc, &msg.common, mb) < 0) return; - if (call->setup_timer != NULL) { + if (dect_timer_running(call->setup_timer)) dect_timer_stop(dh, call->setup_timer); - dect_timer_free(dh, call->setup_timer); - call->setup_timer = NULL; - } dect_mncc_connect_ind(dh, call, &msg); dect_msg_free(dh, &cc_connect_msg_desc, &msg.common); @@ -1264,6 +1261,9 @@ static void dect_cc_rcv_setup_ack(struct dect_handle *dh, struct dect_call *call if (dect_parse_sfmt_msg(dh, &cc_setup_ack_msg_desc, &msg.common, mb) < 0) return; + if (dect_timer_running(call->setup_timer)) + dect_timer_stop(dh, call->setup_timer); + dect_msg_free(dh, &cc_setup_ack_msg_desc, &msg.common); } |