# xStreamBufferReceive(…, portMAX\_DELAY) Task Moved to Suspended and Never Wakes on Data

**URL:** <https://forums.freertos.org/t/xstreambufferreceive-portmax-delay-task-moved-to-suspended-and-never-wakes-on-data/23723>\
**Category:** Kernel\
**Tags:** debug\
**Created:** [August 13, 2025, 1:49pm UTC](https://forums.freertos.org/t/xstreambufferreceive-portmax-delay-task-moved-to-suspended-and-never-wakes-on-data/23723 "2025-08-13T13:49:41Z")\
**Posts on this page:** 1\
**Showing post:** 25

<div class="post-metadata">

**Author:** ![Nikolay-Po](https://d3iykfbgfh8zhg.cloudfront.net/user_avatar/forums.freertos.org/nikolay-po/32/5841_2.png) [@Nikolay-Po](https://forums.freertos.org/u/Nikolay-Po)\
**Post date:** [August 15, 2025, 8:25am UTC](https://forums.freertos.org/t/xstreambufferreceive-portmax-delay-task-moved-to-suspended-and-never-wakes-on-data/23723/25 "2025-08-15T08:25:55Z")

</div>

Okay. It was not too hard.  
Here is main.c which is demonstrating the problem in my environment:

```auto
/*
 * main.c
 *
 * Created on: Aug 15, 2025
 * Author: nikolaypo
 */

#define DebugUART_PRIO 5
#define TASK1_TASK_PRIO 4
#define TASK2_TASK_PRIO 3

#define TASK1_STK_SIZE 256
#define TASK2_STK_SIZE 256
#define DebugUART_STK_SIZE 256 //Stack size for debug background output handler

//#define DebugUARTtxSize 320 //Size of debug UART Tx buffer
//#define xBufferSizeBytes DebugUARTtxSize

#include "FreeRTOS.h"
#include "task.h"
#include "stream_buffer.h"
#include "message_buffer.h"

//Static tasks memory
TaskHandle_t xDebugUART; //Debug background output handler for RTOS tasks
StaticTask_t xDebugUART_TCB; //Task data structure
StackType_t puxDbgUARTstkBuf[DebugUART_STK_SIZE]; //Static task stack buffer

TaskHandle_t Task1Task_Handler;
StaticTask_t xTask1Buffer;
StackType_t uxTask1StackBuffer[TASK1_STK_SIZE];

TaskHandle_t Task2Task_Handler;
StaticTask_t xTask2Buffer;
StackType_t uxTask2StackBuffer[TASK2_STK_SIZE];

//FreeRTOS debug messages static stream buffer
uint8_t pucDbgMsgBufStor[320/*xBufferSizeBytes*/]; //Debug message buffer storage area
StaticMessageBuffer_t xDbgMsgBufStruct; //Debug message buffer structure
StreamBufferHandle_t xDebugMsgStream; //Debug message buffer handler

//UART message buffer receiver task stuff

static const char HelloString[] = "\nUART started\n"; //Printed each time the UART is configured or re-configured

void task1_task(void *pvParameters) {
	(void) pvParameters;
	TickType_t xLastWakeTime;
	xLastWakeTime = xTaskGetTickCount();
	while (1) {
		vTaskDelayUntil(&xLastWakeTime, 60);
		xStreamBufferSend(xDebugMsgStream, "tsk1\n", 5, 0);
	}
}

void task2_task(void *pvParameters) {
	(void) pvParameters;
	TickType_t xLastWakeTime;
	xLastWakeTime = xTaskGetTickCount();
	while (1) {
		vTaskDelayUntil(&xLastWakeTime, 61);
		xStreamBufferSend(xDebugMsgStream, "tsk2\n", 5, 0);
	}
}

void vUART_DMAtx(void *pvParameters) {
	(void) pvParameters;
	char Buff[320/*xBufferSizeBytes*/];
	xStreamBufferSend(xDebugMsgStream, (const void*) HelloString, sizeof(HelloString) - 1, 0); //Send helloString to fill the buffer by first message
	for (;;) {
		size_t Size = xStreamBufferReceive(xDebugMsgStream, (void*) Buff, sizeof(Buff), portMAX_DELAY); //Wait for next message
		if (Size > 0) { //Sanity check for size of data requested for a transmission
			//Some data need to be transferred
			asm volatile ("NOP");
			//I'm getting here only first time after calling xStreamBufferSend() above at first entering to vUART_DMAtx()
		} else {
			//Size of request is zero or there is no request. Do nothing.
		}
	} //Repeat forever
}

int main(void) {
	//Create background debug stream buffer for sending debug messages to UART
	xDebugMsgStream = xStreamBufferCreateStatic(320/*xBufferSizeBytes*/, 1, pucDbgMsgBufStor, &xDbgMsgBufStruct);

	/* create tasks */
	xDebugUART = xTaskCreateStatic(vUART_DMAtx, (const char*) "DebugUART", DebugUART_STK_SIZE, (void*) 1, DebugUART_PRIO, puxDbgUARTstkBuf, &xDebugUART_TCB);

	Task1Task_Handler = xTaskCreateStatic((TaskFunction_t) task1_task, (const char*) "task1", (uint16_t) TASK1_STK_SIZE, (void*) NULL,
			(UBaseType_t) TASK1_TASK_PRIO, uxTask1StackBuffer, &xTask1Buffer);

	Task2Task_Handler = xTaskCreateStatic((TaskFunction_t) task2_task, (const char*) "task2", (uint16_t) TASK2_STK_SIZE, (void*) NULL,
			(UBaseType_t) TASK2_TASK_PRIO, uxTask2StackBuffer, &xTask2Buffer);

	/* Start the RTOS scheduler. */
	vTaskStartScheduler();
	for (;;) {
		asm volatile ("NOP");
		//Shouldn't run at here
	}
}

```

UPD: archived file is attached.  
[StreamBufferNotifyFailureTest.zip](https://forums.freertos.org/uploads/short-url/u0KqTjFkxmkdLTnylx5NKpygVCX.zip) (1.4 KB)

---

_[View the full topic](https://forums.freertos.org/t/xstreambufferreceive-portmax-delay-task-moved-to-suspended-and-never-wakes-on-data/23723)._
