Commit 31dcdf21 authored by Robert Schmidt's avatar Robert Schmidt

Implement abortNotifiedFIFO() to unlock FIFO waits

parent dfd9a91b
...@@ -222,6 +222,24 @@ static inline int abortNotifiedFIFOJob(notifiedFIFO_t *nf, uint64_t key) { ...@@ -222,6 +222,24 @@ static inline int abortNotifiedFIFOJob(notifiedFIFO_t *nf, uint64_t key) {
return nbDeleted; return nbDeleted;
} }
// This functions aborts all messages in the queue, and marks the queue as
// "aborted", such that every call to it will return NULL
static inline void abortNotifiedFIFO(notifiedFIFO_t *nf) {
mutexlock(nf->lockF);
nf->abortFIFO = true;
notifiedFIFO_elt_t **elt = &nf->outF;
while(*elt != NULL) {
notifiedFIFO_elt_t *p = *elt;
*elt = (*elt)->next;
delNotifiedFIFO_elt(p);
}
if (nf->outF == NULL)
nf->inF = NULL;
mutexunlock(nf->lockF);
condsignal(nf->notifF);
}
struct one_thread { struct one_thread {
pthread_t threadID; pthread_t threadID;
int id; int id;
......
...@@ -477,6 +477,11 @@ void init_gNB_Tpool(int inst) { ...@@ -477,6 +477,11 @@ void init_gNB_Tpool(int inst) {
void term_gNB_Tpool(int inst) { void term_gNB_Tpool(int inst) {
PHY_VARS_gNB *gNB = RC.gNB[inst]; PHY_VARS_gNB *gNB = RC.gNB[inst];
abortTpool(&gNB->threadPool); abortTpool(&gNB->threadPool);
abortNotifiedFIFO(&gNB->respDecode);
abortNotifiedFIFO(&gNB->resp_L1);
abortNotifiedFIFO(&gNB->L1_tx_free);
abortNotifiedFIFO(&gNB->L1_tx_filled);
abortNotifiedFIFO(&gNB->L1_tx_out);
} }
/*! /*!
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment