diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index 96d15918397d59f27375c167de891f7c3fbeee96..1f70b588b14af2bdf79ecdac4d7894bd9162f5f5 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -155,6 +155,12 @@ NR_gNB_ULSCH_t new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL)
 void nr_processULSegment(void *arg)
 {
   ldpcDecode_t *rdata = (ldpcDecode_t *)arg;
+
+#ifdef TASK_MANAGER
+    if(*rdata->cancel == true);
+      return;
+#endif
+
   PHY_VARS_gNB *phy_vars_gNB = rdata->gNB;
   NR_UL_gNB_HARQ_t *ulsch_harq = rdata->ulsch_harq;
   t_nrLDPC_dec_params *p_decoderParms = &rdata->decoderParms;
@@ -610,6 +616,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
 
 #ifdef TASK_MANAGER
   ldpcDecode_t* arr = calloc(harq_process->C, sizeof(ldpcDecode_t));
+  _Atomic bool cancel = false;
   int idx_arr = 0;
 #endif
 
@@ -617,6 +624,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
       int E = nr_get_E(G, harq_process->C, Qm, n_layers, r);
 #ifdef TASK_MANAGER
     ldpcDecode_t* rdata = &arr[idx_arr]; 
+    rdata->cancel = &cancel;
     ++idx_arr; 
 #else      
       union ldpcReqUnion id = {.s = {ulsch->rnti, frame, nr_tti_rx, 0, 0}};
diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h
index e52eba620cb462f805bccbc48c87eb00d1ac6ce9..58a435da334794c679294ec6786f3e6322d70a6d 100644
--- a/openair1/PHY/defs_gNB.h
+++ b/openair1/PHY/defs_gNB.h
@@ -810,6 +810,9 @@ typedef struct LDPCDecode_s {
   int offset;
   int decodeIterations;
   uint32_t tbslbrm;
+#ifdef TASK_MANAGER
+ _Atomic bool* cancel;
+#endif
 } ldpcDecode_t;
 
 struct ldpcReqId {
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index 7e06c02424f4507b42204426b925c16ff6626a23..77a1001553a69571c3b7eb628cac37f29d87c204 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -262,11 +262,11 @@ void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req)
            rdata->Kr_bytes - (ulsch_harq->F>>3) -((ulsch_harq->C>1)?3:0));
 
   } else {
-    if ( rdata->nbSegments != ulsch_harq->processedSegments ) {
-      // Let's forget about this optimization for now
+    if (rdata->nbSegments != ulsch_harq->processedSegments){
+#ifdef TASK_MANAGER
       printf("openair1/SCHED_NR/phy_procedures_nr_gNB.c:267 \n");
-      assert(0 != 0);
-#ifndef TASK_MANAGER
+      *rdata->cancel = true;
+#else
       int nb = abortTpoolJob(&gNB->threadPool, req->key);
       nb += abortNotifiedFIFOJob(&gNB->respDecode, req->key);
       gNB->nbDecode-=nb;