Yes you need SYS_ARCH_PROTECT in a multi-threaded environment. Whether or not you use SYS_LIGHTWEIGHT_PROT just controls whether the function prototypes are produced and used in SYS_ARCH_PROTECT:
#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev #define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() #define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) sys_prot_t sys_arch_protect(void); void sys_arch_unprotect(sys_prot_t pval); See the comments for how these should be implemented, you can use either interrupt disable/enable, semaphore or mutex You can also define SYS_ARCH_PROTECT directly in sys_arch.h rather than going through a layer of sys_arch functions Example: sys_arch.h: #define SYS_ARCH_DECL_PROTECT(lev) cpu_flags #define SYS_ARCH_PROTECT(lev) level = disable_interrupts() #define SYS_ARCH_UNPROTECT(lev) enable_interrupts(lev) Joel On Jun 23, 2016, at 09:33 PM, lampo <[email protected]> wrote: thank you ! Joel I still want to know if /SYS_ARCH_PROTECT/ is a must in multiple threads environment? I see a lot of /SYS_ARCH_PROTECT/ in select() and other sockets apis. But when I set /SYS_LIGHATWEIGHT_PROT/ to 1 to use *SYS_ARCH_PROTECT*, the applicaton run into hardfault or stackoverflow(due to RTOS thread scheduler, or deadlock something ), I tried disabling interrupts and mutex both , in implementing SYS_ARCH_PROTECT, both not ok. I wonder if should use SYS_ARCH_PROTECT plus LWIP_NETCONN_SEM_PER_THREAD ? Really appreciate! -- View this message in context: http://lwip.100.n7.nabble.com/LwIP-multithread-select-mode-problems-tp26561p26573.html Sent from the lwip-users mailing list archive at Nabble.com. _______________________________________________ lwip-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/lwip-users
_______________________________________________ lwip-users mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/lwip-users
