summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schodet2012-05-24 09:34:36 +0200
committerNicolas Schodet2012-06-27 11:11:52 +0200
commit7ae4dcff3db9937daa76b733d46a9cc714f6e06f (patch)
tree1df45039cb2fd7f24e41adba766f4c1116344201
parent0d3b423c657820ba26e13609f76915083f320d44 (diff)
cesar/mac/pbproc: move holes update in sub function, refs #3087
-rw-r--r--cesar/mac/pbproc/src/mfs.c51
1 files changed, 33 insertions, 18 deletions
diff --git a/cesar/mac/pbproc/src/mfs.c b/cesar/mac/pbproc/src/mfs.c
index 2304b4b62c..80a0f6f0b0 100644
--- a/cesar/mac/pbproc/src/mfs.c
+++ b/cesar/mac/pbproc/src/mfs.c
@@ -166,6 +166,36 @@ pbproc_mfs_beacon_prepare (pbproc_t *ctx, mfs_tx_t *mfs, pb_beacon_t *pb,
pbproc_mfs_provide (mfs, 1);
}
+static inline void
+pbproc_mfs_update_holes (mfs_tx_t *mfs, pb_t *release_head, int release_nb,
+ int *total_release_nb,
+ int *total_holes_nb_in_released)
+{
+ dbg_claim (mfs);
+ dbg_claim (!release_nb || release_head);
+ dbg_claim (total_release_nb);
+ dbg_claim (total_holes_nb_in_released);
+ u16 holes_nb_in_released;
+ if (release_nb)
+ {
+ /* Update total number of released segments. */
+ *total_release_nb += release_nb;
+ /* Update number of holes. */
+ if (mfs->head)
+ holes_nb_in_released = mfs->head->header.ssn
+ - release_head->header.ssn - release_nb;
+ else
+ holes_nb_in_released = mfs->holes_seg_nb;
+ mfs->holes_seg_nb -= holes_nb_in_released;
+ *total_holes_nb_in_released += holes_nb_in_released;
+ /* Change to RE_SYNC if no PB remain in the window. */
+ if (mfs->fsm_state == MFS_FSM_CMD_IN_SYNC
+ && (*total_release_nb + *total_holes_nb_in_released
+ >= mfs->window_size))
+ mfs->fsm_state = MFS_FSM_CMD_RE_SYNC;
+ }
+}
+
bool
pbproc_mfs_expire (pbproc_t *ctx, mfs_tx_t *mfs, u32 expiration_ntb,
uint *expired_nb)
@@ -192,24 +222,9 @@ pbproc_mfs_expire (pbproc_t *ctx, mfs_tx_t *mfs, u32 expiration_ntb,
release_nb = pbproc_mfs_remove_expired (ctx, mfs, expiration_ntb, 0,
PBPROC_MFS_EXPIRE_BUDGET, &release_head, &release_tail);
/* Update number of holes and MFS state. */
- if (release_nb)
- {
- total_release_nb += release_nb;
- u16 holes_nb_in_released;
- /* Update number of holes. */
- if (mfs->head)
- holes_nb_in_released = mfs->head->header.ssn -
- release_head->header.ssn - release_nb;
- else
- holes_nb_in_released = mfs->holes_seg_nb;
- mfs->holes_seg_nb -= holes_nb_in_released;
- total_holes_nb_in_released += holes_nb_in_released;
- /* Change to RE_SYNC if no PB remain in the window. */
- if (mfs->fsm_state == MFS_FSM_CMD_IN_SYNC
- && (total_release_nb + total_holes_nb_in_released
- >= mfs->window_size))
- mfs->fsm_state = MFS_FSM_CMD_RE_SYNC;
- }
+ pbproc_mfs_update_holes (mfs, release_head, release_nb,
+ &total_release_nb,
+ &total_holes_nb_in_released);
/* Is empty? */
empty = !mfs->head;
}