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

Method sigprocmask

source/kernel/kthread.cpp:1376–1411  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1374}
1375
1376U32 KThread::sigprocmask(U32 how, U32 set, U32 oset, U32 sigsetSize) {
1377 if (oset!=0) {
1378 if (sigsetSize==4) {
1379 memory->writed(oset, (U32)this->sigMask);
1380 } else if (sigsetSize==8) {
1381 memory->writeq(oset, this->sigMask);
1382 } else {
1383 klog_fmt("sigprocmask: can't handle sigsetSize=%d", sigsetSize);
1384 }
1385 //klog("syscall_sigprocmask oset=%X", thread->sigMask);
1386 }
1387 if (set!=0) {
1388 U64 mask = 0;
1389
1390 if (sigsetSize==4) {
1391 mask = memory->readd(set);
1392 } else if (sigsetSize==8) {
1393 mask = memory->readq(set);
1394 } else {
1395 klog_fmt("sigprocmask: can't handle sigsetSize=%d", sigsetSize);
1396 }
1397 if (how == K_SIG_BLOCK) {
1398 this->sigMask|=mask;
1399 //klog("syscall_sigprocmask block %X(%X)", set, thread->sigMask);
1400 } else if (how == K_SIG_UNBLOCK) {
1401 this->sigMask&=~mask;
1402 //klog("syscall_sigprocmask unblock %X(%X)", set, thread->sigMask);
1403 } else if (how == K_SIG_SETMASK) {
1404 this->sigMask = mask;
1405 //klog("syscall_sigprocmask set %X(%X)", set, thread->sigMask);
1406 } else {
1407 kpanic_fmt("sigprocmask how %d unsupported", how);
1408 }
1409 }
1410 return 0;
1411}
1412
1413U32 KThread::sigtimedwait(U32 set, U32 info, U32 timeout, U32 sizeofSet, bool time64) {
1414 BOXEDWINE_CRITICAL_SECTION_WITH_CONDITION(sigWaitCond);

Callers 1

syscall_rt_sigprocmaskFunction · 0.80

Calls 6

klog_fmtFunction · 0.85
kpanic_fmtFunction · 0.85
writeqMethod · 0.80
readqMethod · 0.80
writedMethod · 0.45
readdMethod · 0.45

Tested by

no test coverage detected