MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / timerfd_settime

Method timerfd_settime

source/kernel/kprocess.cpp:2547–2589  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2545}
2546
2547U32 KProcess::timerfd_settime(U32 fildes, U32 flags, U32 newValue, U32 oldValue) {
2548 KFileDescriptorPtr fd = getFileDescriptor(fildes);
2549 if (!fd) {
2550 return -K_EBADF;
2551 }
2552 if (fd->kobject->type != KTYPE_SIGNAL) {
2553 return -K_EINVAL;
2554 }
2555 if (!newValue) {
2556 return -K_EFAULT;
2557 }
2558 std::shared_ptr<KTimer> timer = std::dynamic_pointer_cast<KTimer>(fd->kobject);
2559 if (oldValue) {
2560 U64 microNextTimer = timer->getMicroNextTimer();
2561 U64 microInterval = timer->getMicroInterval();
2562
2563 memory->writed(oldValue, (U32)(microInterval / 1000000));
2564 memory->writed(oldValue + 4, (U32)((microInterval % 1000000) * 1000));
2565
2566 if (!microNextTimer) {
2567 memory->writed(oldValue + 8, 0);
2568 memory->writed(oldValue + 12, 0);
2569 } else {
2570 U64 currentTime = KSystem::getSystemTimeAsMicroSeconds();
2571 S64 diff = (S64)microNextTimer - (S64)currentTime;
2572 if (diff < 0) {
2573 memory->writed(oldValue + 8, 0);
2574 memory->writed(oldValue + 12, 0);
2575 } else {
2576 memory->writed(oldValue + 8, (U32)(diff / 1000000));
2577 memory->writed(oldValue + 12, (U32)((diff % 1000000) * 1000));
2578 }
2579 }
2580 }
2581 U64 interval = memory->readd(newValue) * 1000000 + memory->readd(newValue+4) / 1000;
2582 U64 next = memory->readd(newValue+8) * 1000000 + memory->readd(newValue + 12) / 1000;
2583 // TFD_TIMER_ABSTIME
2584 if ((flags & 1) == 0) {
2585 next += KSystem::getSystemTimeAsMicroSeconds();
2586 }
2587 timer->setTimes(interval, next);
2588 return 0;
2589}
2590
2591U32 KProcess::timerfd_gettime(U32 fildes, U32 value) {
2592 KFileDescriptorPtr fd = getFileDescriptor(fildes);

Callers 1

syscall_timerfd_settimeFunction · 0.80

Calls 5

getMicroNextTimerMethod · 0.80
getMicroIntervalMethod · 0.80
writedMethod · 0.45
readdMethod · 0.45
setTimesMethod · 0.45

Tested by

no test coverage detected