From 90795b5068c14b8874c5869c10cba8ed919a60ac Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Sun, 6 Sep 2009 11:07:33 +0000 Subject: [PATCH] fix return value in lwip_select function. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@39 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- net/lwip/src/api/sockets.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/net/lwip/src/api/sockets.c b/net/lwip/src/api/sockets.c index f177261e10..efa54f494b 100644 --- a/net/lwip/src/api/sockets.c +++ b/net/lwip/src/api/sockets.c @@ -966,7 +966,17 @@ lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, msectimeout = 1; } - i = sys_sem_wait_timeout(select_cb.sem, msectimeout); + + if (msectimeout > 0 && sys_arch_timeouts() == NULL){ + /* it's not a lwip thread, use os semaphore with timeout to handle it */ + i = sys_arch_sem_wait(select_cb.sem, msectimeout); + if (i == SYS_ARCH_TIMEOUT) i = 0; + else i = 1; + } + else { + /* it's a lwip thread, use os semaphore with timeout to handle it */ + i = sys_sem_wait_timeout(select_cb.sem, msectimeout); + } /* Take us off the list */ sys_sem_wait(selectsem);