summaryrefslogtreecommitdiff
path: root/cesar/mac/sar
diff options
context:
space:
mode:
authorNicolas Schodet2012-06-07 18:03:37 +0200
committerNicolas Schodet2012-06-27 11:11:56 +0200
commit37b8c7da1247eaef8a8e97f792786a716b3fb4f2 (patch)
treee41b8c7b9237a3fd03f787eca8005b200298658b /cesar/mac/sar
parent8aa0e86125a73681d461d4b86f3381ba1dec94dc (diff)
cesar/mac/sar: call trim when no enough memory, refs #3087
Diffstat (limited to 'cesar/mac/sar')
-rw-r--r--cesar/mac/sar/src/rx.c2
-rw-r--r--cesar/mac/sar/src/sar.c2
-rw-r--r--cesar/mac/sar/src/tx.c3
3 files changed, 5 insertions, 2 deletions
diff --git a/cesar/mac/sar/src/rx.c b/cesar/mac/sar/src/rx.c
index 7907a87b89..3fec881fdf 100644
--- a/cesar/mac/sar/src/rx.c
+++ b/cesar/mac/sar/src/rx.c
@@ -798,7 +798,7 @@ sar_rx_mfs_detect_and_reconstitute_mf (sar_t *ctx, mfs_rx_t *mfs)
if (qte == 0)
{
/* Enough memory ? */
- if (blk_slack ())
+ if (blk_slack () || sar_mfs_trim (ctx, MAC_CAP_NB))
{
job = sar_rx_mfs_detect_and_reconstitute_mf__create_job (
ctx, mfs, &sar_mf, pb_mf_ends);
diff --git a/cesar/mac/sar/src/sar.c b/cesar/mac/sar/src/sar.c
index e31ae4cd5e..d23df7fb70 100644
--- a/cesar/mac/sar/src/sar.c
+++ b/cesar/mac/sar/src/sar.c
@@ -177,6 +177,8 @@ sar_pb_pool_refill (sar_t *ctx, uint pb_nb)
if (pb_nb)
{
uint available = blk_slack ();
+ if (available < pb_nb)
+ available = sar_mfs_trim (ctx, MAC_CAP_NB);
uint allocate = MIN (pb_nb, available);
ctx->pbs_missing_for_pbproc = pb_nb - allocate;
if (allocate)
diff --git a/cesar/mac/sar/src/tx.c b/cesar/mac/sar/src/tx.c
index 00bb681552..7c52d0f014 100644
--- a/cesar/mac/sar/src/tx.c
+++ b/cesar/mac/sar/src/tx.c
@@ -321,7 +321,8 @@ sar_msdu_process (sar_t *ctx, u8 *buffer, u16 length, mfs_tx_t *mfs,
* activated? */
if (ctx->activate
&& mfs->seg_nb < mfs_tx_max_seg_nb
- && (blk_slack () || mfs->seg_nb <= MAC_SAR_EM_MAX_PB_ALLOWED))
+ && (blk_slack () || mfs->seg_nb <= MAC_SAR_EM_MAX_PB_ALLOWED
+ || sar_mfs_trim (ctx, mfs->cap)))
{
if (mfs->fsm_state == MFS_FSM_CMD_RELEASE)
{