message / peer FSM: fix completion detection + timeout logic
* when the message_peer FSM times out, we msut notify the message_fsm * when waiting for DELETE_ACK, require all message_peer FSM instances to enter DELETE state before signaling completion Change-Id: Ibff5e25ebb34843c4b3165329f432892ac6a6ef5
This commit is contained in:
parent
d800ab2743
commit
fbc3015c02
|
@ -66,7 +66,7 @@ static void smscb_fsm_wait_write_ack(struct osmo_fsm_inst *fi, uint32_t event, v
|
|||
* timed out */
|
||||
llist_for_each_entry(peer_fi, &fi->proc.children, proc.child) {
|
||||
if (peer_fi->state == SMSCB_S_WAIT_WRITE_ACK)
|
||||
break;
|
||||
return;
|
||||
}
|
||||
rest_it_op_set_http_result(cbcmsg->it_op, 201, "Created"); // FIXME: error cases
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0);
|
||||
|
@ -125,7 +125,7 @@ static void smscb_fsm_wait_replace_ack(struct osmo_fsm_inst *fi, uint32_t event,
|
|||
case SMSCB_E_CBSP_REPLACE_NACK:
|
||||
llist_for_each_entry(peer_fi, &fi->proc.children, proc.child) {
|
||||
if (peer_fi->state == SMSCB_S_WAIT_REPLACE_ACK)
|
||||
break;
|
||||
return;
|
||||
}
|
||||
rest_it_op_set_http_result(cbcmsg->it_op, 200, "OK"); // FIXME: error cases
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0);
|
||||
|
@ -153,7 +153,7 @@ static void smscb_fsm_wait_status_ack(struct osmo_fsm_inst *fi, uint32_t event,
|
|||
case SMSCB_E_CBSP_STATUS_NACK:
|
||||
llist_for_each_entry(peer_fi, &fi->proc.children, proc.child) {
|
||||
if (peer_fi->state == SMSCB_S_WAIT_STATUS_ACK)
|
||||
break;
|
||||
return;
|
||||
}
|
||||
rest_it_op_set_http_result(cbcmsg->it_op, 200, "OK"); // FIXME: error cases
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0);
|
||||
|
@ -180,8 +180,8 @@ static void smscb_fsm_wait_delete_ack(struct osmo_fsm_inst *fi, uint32_t event,
|
|||
case SMSCB_E_CBSP_DELETE_ACK:
|
||||
case SMSCB_E_CBSP_DELETE_NACK:
|
||||
llist_for_each_entry(peer_fi, &fi->proc.children, proc.child) {
|
||||
if (peer_fi->state == SMSCB_S_WAIT_DELETE_ACK)
|
||||
break;
|
||||
if (peer_fi->state != SMSCB_S_DELETED)
|
||||
return;
|
||||
}
|
||||
rest_it_op_set_http_result(cbcmsg->it_op, 200, "OK"); // FIXME: error cases
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_DELETED, 0, 0);
|
||||
|
|
|
@ -434,15 +434,19 @@ static int smscb_p_fsm_timer_cb(struct osmo_fsm_inst *fi)
|
|||
switch (fi->T) {
|
||||
case T_WAIT_WRITE_ACK:
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0);
|
||||
osmo_fsm_inst_dispatch(fi->proc.parent, SMSCB_E_CBSP_WRITE_NACK, NULL);
|
||||
break;
|
||||
case T_WAIT_REPLACE_ACK:
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0);
|
||||
osmo_fsm_inst_dispatch(fi->proc.parent, SMSCB_E_CBSP_REPLACE_NACK, NULL);
|
||||
break;
|
||||
case T_WAIT_STATUS_ACK:
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_ACTIVE, 0, 0);
|
||||
osmo_fsm_inst_dispatch(fi->proc.parent, SMSCB_E_CBSP_STATUS_NACK, NULL);
|
||||
break;
|
||||
case T_WAIT_DELETE_ACK:
|
||||
osmo_fsm_inst_state_chg(fi, SMSCB_S_DELETED, 0, 0);
|
||||
osmo_fsm_inst_dispatch(fi->proc.parent, SMSCB_E_CBSP_DELETE_NACK, NULL);
|
||||
break;
|
||||
default:
|
||||
OSMO_ASSERT(0);
|
||||
|
|
Loading…
Reference in New Issue