| 333 | ****************************************************************************/ |
| 334 | |
| 335 | static int rpmsgdev_wait(FAR struct file *filep, pollevent_t events) |
| 336 | { |
| 337 | int ret; |
| 338 | sem_t sem; |
| 339 | struct pollfd fds; |
| 340 | |
| 341 | nxsem_init(&sem, 0, 0); |
| 342 | |
| 343 | fds.events = events; |
| 344 | fds.arg = &sem; |
| 345 | fds.cb = rpmsgdev_wait_cb; |
| 346 | events |= POLLERR | POLLHUP; |
| 347 | |
| 348 | while (1) |
| 349 | { |
| 350 | ret = rpmsgdev_poll(filep, &fds, true); |
| 351 | if (ret < 0) |
| 352 | { |
| 353 | return ret; |
| 354 | } |
| 355 | |
| 356 | ret = nxsem_wait(&sem); |
| 357 | rpmsgdev_poll(filep, &fds, false); |
| 358 | if (ret < 0) |
| 359 | { |
| 360 | return ret; |
| 361 | } |
| 362 | |
| 363 | if ((fds.revents & events) != 0) |
| 364 | { |
| 365 | break; |
| 366 | } |
| 367 | } |
| 368 | |
| 369 | return ret; |
| 370 | } |
| 371 | |
| 372 | /**************************************************************************** |
| 373 | * Name: rpmsgdev_read |
no test coverage detected