Lines Matching refs:mbox

158   struct sys_mbox *mbox;
161 mbox = (struct sys_mbox *)malloc(sizeof(struct sys_mbox));
162 if (mbox == NULL) {
165 mbox->first = mbox->last = 0;
166 mbox->not_empty = sys_sem_new_internal(0);
167 mbox->not_full = sys_sem_new_internal(0);
168 mbox->mutex = sys_sem_new_internal(1);
169 mbox->wait_send = 0;
171 SYS_STATS_INC_USED(mbox);
172 *mb = mbox;
180 struct sys_mbox *mbox = *mb;
181 SYS_STATS_DEC(mbox.used);
182 sys_arch_sem_wait(&mbox->mutex, 0);
184 sys_sem_free_internal(mbox->not_empty);
185 sys_sem_free_internal(mbox->not_full);
186 sys_sem_free_internal(mbox->mutex);
187 mbox->not_empty = mbox->not_full = mbox->mutex = NULL;
188 /* LWIP_DEBUGF("sys_mbox_free: mbox 0x%lx\n", mbox); */
189 free(mbox);
197 struct sys_mbox *mbox;
198 LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
199 mbox = *mb;
201 sys_arch_sem_wait(&mbox->mutex, 0);
203 LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_trypost: mbox %p msg %p\n",
204 (void *)mbox, (void *)msg));
206 if ((mbox->last + 1) >= (mbox->first + SYS_MBOX_SIZE)) {
207 sys_sem_signal(&mbox->mutex);
211 mbox->msgs[mbox->last % SYS_MBOX_SIZE] = msg;
213 if (mbox->last == mbox->first) {
219 mbox->last++;
222 sys_sem_signal(&mbox->not_empty);
225 sys_sem_signal(&mbox->mutex);
234 struct sys_mbox *mbox;
235 LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
236 mbox = *mb;
238 sys_arch_sem_wait(&mbox->mutex, 0);
240 LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_post: mbox %p msg %p\n", (void *)mbox, (void *)msg));
242 while ((mbox->last + 1) >= (mbox->first + SYS_MBOX_SIZE)) {
243 mbox->wait_send++;
244 sys_sem_signal(&mbox->mutex);
245 sys_arch_sem_wait(&mbox->not_full, 0);
246 sys_arch_sem_wait(&mbox->mutex, 0);
247 mbox->wait_send--;
250 mbox->msgs[mbox->last % SYS_MBOX_SIZE] = msg;
252 if (mbox->last == mbox->first) {
258 mbox->last++;
261 sys_sem_signal(&mbox->not_empty);
264 sys_sem_signal(&mbox->mutex);
270 struct sys_mbox *mbox;
271 LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
272 mbox = *mb;
274 sys_arch_sem_wait(&mbox->mutex, 0);
276 if (mbox->first == mbox->last) {
277 sys_sem_signal(&mbox->mutex);
282 LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_tryfetch: mbox %p msg %p\n", (void *)mbox, *msg));
283 *msg = mbox->msgs[mbox->first % SYS_MBOX_SIZE];
286 LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_tryfetch: mbox %p, null msg\n", (void *)mbox));
289 mbox->first++;
291 if (mbox->wait_send) {
292 sys_sem_signal(&mbox->not_full);
295 sys_sem_signal(&mbox->mutex);
304 struct sys_mbox *mbox;
305 LWIP_ASSERT("invalid mbox", (mb != NULL) && (*mb != NULL));
306 mbox = *mb;
310 sys_arch_sem_wait(&mbox->mutex, 0);
312 while (mbox->first == mbox->last) {
313 sys_sem_signal(&mbox->mutex);
318 time_needed = sys_arch_sem_wait(&mbox->not_empty, timeout);
324 sys_arch_sem_wait(&mbox->not_empty, 0);
327 sys_arch_sem_wait(&mbox->mutex, 0);
331 LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_fetch: mbox %p msg %p\n", (void *)mbox, *msg));
332 *msg = mbox->msgs[mbox->first % SYS_MBOX_SIZE];
335 LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_fetch: mbox %p, null msg\n", (void *)mbox));
338 mbox->first++;
340 if (mbox->wait_send) {
341 sys_sem_signal(&mbox->not_full);
344 sys_sem_signal(&mbox->mutex);