diff options
Diffstat (limited to 'src/host/trxcon/src/sched_lchan_pdtch.c')
-rw-r--r-- | src/host/trxcon/src/sched_lchan_pdtch.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/host/trxcon/src/sched_lchan_pdtch.c b/src/host/trxcon/src/sched_lchan_pdtch.c index 03d43ce2..001a2d9c 100644 --- a/src/host/trxcon/src/sched_lchan_pdtch.c +++ b/src/host/trxcon/src/sched_lchan_pdtch.c @@ -140,19 +140,22 @@ int tx_pdtch_fn(struct l1sched_lchan_state *lchan, *mask = *mask << 4; - lchan->prim = prim_dequeue_pdtch(lchan, br->fn); - if (lchan->prim == NULL) + struct msgb *msg = prim_dequeue_pdtch(lchan, br->fn); + if (msg == NULL) return -ENOENT; /* Encode payload */ - rc = gsm0503_pdtch_encode(bursts_p, msgb_l2(lchan->prim), msgb_l2len(lchan->prim)); + rc = gsm0503_pdtch_encode(bursts_p, msgb_l2(msg), msgb_l2len(msg)); if (rc < 0) { LOGP_LCHAND(lchan, LOGL_ERROR, "Failed to encode L2 payload (len=%u): %s\n", - msgb_l2len(lchan->prim), msgb_hexdump_l2(lchan->prim)); - l1sched_lchan_prim_drop(lchan); + msgb_l2len(msg), msgb_hexdump_l2(msg)); + msgb_free(msg); return -EINVAL; } + /* Confirm data / traffic sending (pass ownership of the msgb/prim) */ + l1sched_lchan_emit_data_cnf(lchan, msg, br->fn); + send_burst: /* Determine which burst should be sent */ burst = bursts_p + br->bid * 116; @@ -173,11 +176,5 @@ send_burst: LOGP_LCHAND(lchan, LOGL_DEBUG, "Scheduled at fn=%u burst=%u\n", br->fn, br->bid); - /* If we have sent the last (4/4) burst */ - if ((*mask & 0x0f) == 0x0f) { - /* Confirm data / traffic sending (pass ownership of the prim) */ - l1sched_lchan_emit_data_cnf(lchan, br->fn); - } - return 0; } |