Browse Source

kernel: `k_msgq_put` should trigger reschedule

Make `k_msgq_put` as scheduler point to resolve
high priority thread can not preempt low priority
thread.

Signed-off-by: TaiJu Wu <tjwu1217@gmail.com>
pull/82989/head
TaiJu Wu 9 months ago committed by Benjamin Cabé
parent
commit
fc47180850
  1. 1
      doc/kernel/services/data_passing/message_queues.rst
  2. 2
      kernel/msg_q.c

1
doc/kernel/services/data_passing/message_queues.rst

@ -108,6 +108,7 @@ The following code builds on the example above, and uses the message queue @@ -108,6 +108,7 @@ The following code builds on the example above, and uses the message queue
to pass data items from a producing thread to one or more consuming threads.
If the message queue fills up because the consumers can't keep up, the
producing thread throws away all existing data so the newer data can be saved.
Note that this api will trigger reschedule.
.. code-block:: c

2
kernel/msg_q.c

@ -178,7 +178,7 @@ int z_impl_k_msgq_put(struct k_msgq *msgq, const void *data, k_timeout_t timeout @@ -178,7 +178,7 @@ int z_impl_k_msgq_put(struct k_msgq *msgq, const void *data, k_timeout_t timeout
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_msgq, put, msgq, timeout, result);
k_spin_unlock(&msgq->lock, key);
z_reschedule(&msgq->lock, key);
return result;
}

Loading…
Cancel
Save