aboutsummaryrefslogtreecommitdiffstats
path: root/os/various/lwip_bindings/arch/sys_arch.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/various/lwip_bindings/arch/sys_arch.c')
-rw-r--r--os/various/lwip_bindings/arch/sys_arch.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/os/various/lwip_bindings/arch/sys_arch.c b/os/various/lwip_bindings/arch/sys_arch.c
index 47e8c70a0..835d6f5c5 100644
--- a/os/various/lwip_bindings/arch/sys_arch.c
+++ b/os/various/lwip_bindings/arch/sys_arch.c
@@ -202,28 +202,43 @@ void sys_mbox_set_invalid(sys_mbox_t *mbox) {
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread,
void *arg, int stacksize, int prio) {
-
size_t wsz;
void *wsp;
+ syssts_t sts;
+ thread_t *tp;
(void)name;
wsz = THD_WORKING_AREA_SIZE(stacksize);
wsp = chCoreAlloc(wsz);
if (wsp == NULL)
return NULL;
- return (sys_thread_t)chThdCreateStatic(wsp, wsz, prio, (tfunc_t)thread, arg);
+
+#if CH_DBG_FILL_THREADS == TRUE
+ _thread_memfill((uint8_t *)wsp,
+ (uint8_t *)wsp + sizeof(thread_t),
+ CH_DBG_THREAD_FILL_VALUE);
+ _thread_memfill((uint8_t *)wsp + sizeof(thread_t),
+ (uint8_t *)wsp + wsz,
+ CH_DBG_STACK_FILL_VALUE);
+#endif
+
+ sts = chSysGetStatusAndLockX();
+ tp = chThdCreateI(wsp, wsz, prio, (tfunc_t)thread, arg);
+ chRegSetThreadNameX(tp, name);
+ chThdStartI(tp);
+ chSysRestoreStatusX(sts);
+
+ return (sys_thread_t)tp;
}
sys_prot_t sys_arch_protect(void) {
- osalSysLock();
- return 0;
+ return chSysGetStatusAndLockX();
}
void sys_arch_unprotect(sys_prot_t pval) {
- (void)pval;
- osalSysUnlock();
+ osalSysRestoreStatusX((syssts_t)pval);
}
u32_t sys_now(void) {