+ multiple process entries per event type

This commit is contained in:
Julian Hinxlage 2019-11-19 11:56:18 +01:00
parent b9882cb181
commit 3c76d941fa
3 changed files with 25 additions and 15 deletions

View File

@ -37,8 +37,11 @@ namespace vkvm {
auto callEvent(EventType type) -> bool { auto callEvent(EventType type) -> bool {
auto ivt = getInterrupTable(); auto ivt = getInterrupTable();
if (ivt[type].pid != 0) { for(int i = 0; i < impl.interruptEntrysPerEventType;i++){
sendSignal(ivt[type].pid, ivt[type].signum); auto &entry= ivt[type * impl.interruptEntrysPerEventType + i];
if (entry.pid != 0) {
sendSignal(entry.pid, entry.signum);
}
} }
return true; return true;
} }

View File

@ -54,7 +54,8 @@ constexpr int keyboardBufferSize = 16;
int sharedMemoryPid; int sharedMemoryPid;
key_t sharedMemoryKey; key_t sharedMemoryKey;
int sharedMemorySize; int sharedMemorySize;
int interruptEntyCount = 64; //NOLINT int interruptEntyCount = 256; //NOLINT
int interruptEntrysPerEventType = 8;
int reservedSize = 1024; //NOLINT int reservedSize = 1024; //NOLINT
std::vector<std::function<void()>> eventTable; std::vector<std::function<void()>> eventTable;
}; };

View File

@ -37,21 +37,27 @@ namespace vkvm {
lockSharedMemory(); lockSharedMemory();
ivt[type].pid = getpid(); for(int i = 0; i < impl.interruptEntrysPerEventType;i++){
ivt[type].signum = signum; auto &entry= ivt[type * impl.interruptEntrysPerEventType + i];
impl.eventTable.push_back(handler); if (entry.pid == 0) {
onSignal(signum, [](int sig){ entry.pid = getpid();
if(sig >= SIGUSR1){ entry.signum = signum;
if((sig - SIGUSR1) < impl.eventTable.size()){ impl.eventTable.push_back(handler);
impl.eventTable[sig - SIGUSR1]();
} onSignal(signum, [](int sig){
if(sig >= SIGUSR1){
if((sig - SIGUSR1) < impl.eventTable.size()){
impl.eventTable[sig - SIGUSR1]();
}
}
});
unlockSharedMemory();
return true;
} }
}); }
unlockSharedMemory(); unlockSharedMemory();
return false;
return true;
} }
auto setPixel(int x, int y, Color color) -> bool { auto setPixel(int x, int y, Color color) -> bool {