MCPcopy Create free account
hub / github.com/F-Stack/f-stack / kevent

Function kevent

adapter/syscall/ff_hook_syscall.c:2423–2608  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2421}
2422
2423int
2424kevent(int kq, const struct kevent *changelist, int nchanges,
2425 struct kevent *eventlist, int nevents,
2426 const struct timespec *timeout)
2427{
2428 int i;
2429 int maxevents = nevents;
2430 struct kevent *kev;
2431
2432 DEBUG_LOG("kq:%d, nchanges:%d, nevents:%d\n", kq, nchanges, nevents);
2433
2434 if (unlikely(inited == 0 && ff_adapter_init() < 0)) {
2435 errno = ENOSYS;
2436 return -1;
2437 }
2438
2439 kq = restore_fstack_fd(kq);
2440
2441 DEFINE_REQ_ARGS_STATIC(kevent);
2442 static __thread struct kevent *sh_changelist = NULL;
2443 static __thread int sh_changelist_len = 0;
2444 static __thread struct kevent *sh_eventlist = NULL;
2445 static __thread int sh_eventlist_len = 0;
2446
2447 if (changelist != NULL && nchanges > 0) {
2448 if (sh_changelist == NULL || sh_changelist_len < nchanges) {
2449 if (sh_changelist) {
2450 share_mem_free(sh_changelist);
2451 }
2452
2453 sh_changelist_len = nchanges;
2454 sh_changelist = share_mem_alloc(sizeof(struct kevent) * sh_changelist_len);
2455 if (sh_changelist == NULL) {
2456 RETURN_ERROR_NOFREE(ENOMEM);
2457 }
2458 }
2459 rte_memcpy(sh_changelist, changelist, sizeof(struct kevent) * nchanges);
2460
2461 for(i = 0; i < nchanges; i++) {
2462 kev = (struct kevent *)&sh_changelist[i];
2463 switch (kev->filter) {
2464 case EVFILT_READ:
2465 case EVFILT_WRITE:
2466 case EVFILT_VNODE:
2467 kev->ident = restore_fstack_fd(kev->ident);
2468 break;
2469 default:
2470 break;
2471 }
2472 }
2473 args->changelist = sh_changelist;
2474 args->nchanges = nchanges;
2475 } else {
2476 args->changelist = NULL;
2477 args->nchanges = 0;
2478 }
2479
2480 if (eventlist != NULL && nevents > 0) {

Callers

nothing calls this directly

Calls 6

ff_adapter_initFunction · 0.85
restore_fstack_fdFunction · 0.70
convert_fstack_fdFunction · 0.70
rte_memcpyFunction · 0.50
rte_spinlock_unlockFunction · 0.50
rte_spinlock_lockFunction · 0.50

Tested by

no test coverage detected