提交 cf618494 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

More lwIP sys_arch.c semaphore stuff

上级 ad8d4f37
...@@ -21,6 +21,7 @@ typedef struct sys_mbox { ...@@ -21,6 +21,7 @@ typedef struct sys_mbox {
typedef struct sys_sem { typedef struct sys_sem {
struct spinlock s; struct spinlock s;
struct condvar c; struct condvar c;
volatile int invalid;
volatile u8 count; volatile u8 count;
} sys_sem_t; } sys_sem_t;
......
...@@ -114,7 +114,17 @@ done: ...@@ -114,7 +114,17 @@ done:
u32_t u32_t
sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
{ {
DIE; u32_t r = SYS_MBOX_EMPTY;
acquire(&mbox->s);
if (mbox->head - mbox->tail != 0) {
if (msg)
*msg = mbox->msg[mbox->tail % MBOXSLOTS];
mbox->tail++;
r = 0;
}
release(&mbox->s);
return r;
} }
// //
...@@ -126,25 +136,25 @@ sys_sem_new(sys_sem_t *sem, u8_t count) ...@@ -126,25 +136,25 @@ sys_sem_new(sys_sem_t *sem, u8_t count)
initlock(&sem->s, "lwIP sem"); initlock(&sem->s, "lwIP sem");
initcondvar(&sem->c, "lwIP condvar"); initcondvar(&sem->c, "lwIP condvar");
sem->count = count; sem->count = count;
sem->invalid = 0;
return ERR_OK; return ERR_OK;
} }
void void
sys_sem_free(sys_sem_t *sem) sys_sem_free(sys_sem_t *sem)
{ {
DIE;
} }
void void
sys_sem_set_invalid(sys_sem_t *sem) sys_sem_set_invalid(sys_sem_t *sem)
{ {
DIE; sem->invalid = 1;
} }
int int
sys_sem_valid(sys_sem_t *sem) sys_sem_valid(sys_sem_t *sem)
{ {
DIE; return !sem->invalid;
} }
void void
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论