MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _console_take

Function _console_take

src/kservice.c:239–270  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

237}
238
239static void _console_take(void)
240{
241 rt_ubase_t level = rt_spin_lock_irqsave(&_syscon_lock);
242 rt_thread_t self_thread = rt_thread_self();
243 rt_base_t critical_level;
244 RT_UNUSED(critical_level);
245
246 while (_pr_curr_user != self_thread)
247 {
248 if (_pr_curr_user == RT_NULL)
249 {
250 /* no preemption is allowed to avoid dead lock */
251 critical_level = rt_enter_critical();
252#ifdef RT_USING_DEBUG
253 _pr_critical_level = _syscon_lock.critical_level;
254 _syscon_lock.critical_level = critical_level;
255#endif
256 _pr_curr_user = self_thread;
257 break;
258 }
259 else
260 {
261 rt_spin_unlock_irqrestore(&_syscon_lock, level);
262 rt_thread_yield();
263 level = rt_spin_lock_irqsave(&_syscon_lock);
264 }
265 }
266
267 _pr_curr_user_nested++;
268
269 rt_spin_unlock_irqrestore(&_syscon_lock, level);
270}
271
272static void _console_release(void)
273{

Callers

nothing calls this directly

Calls 5

rt_thread_selfFunction · 0.85
rt_thread_yieldFunction · 0.85
rt_spin_lock_irqsaveFunction · 0.70
rt_enter_criticalFunction · 0.70

Tested by

no test coverage detected