summaryrefslogtreecommitdiffstats
path: root/src/host/trxcon/src/sched_lchan_pdtch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/host/trxcon/src/sched_lchan_pdtch.c')
-rw-r--r--src/host/trxcon/src/sched_lchan_pdtch.c19
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;
}