+ 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 ivt = getInterrupTable();
if (ivt[type].pid != 0) {
sendSignal(ivt[type].pid, ivt[type].signum);
for(int i = 0; i < impl.interruptEntrysPerEventType;i++){
auto &entry= ivt[type * impl.interruptEntrysPerEventType + i];
if (entry.pid != 0) {
sendSignal(entry.pid, entry.signum);
}
}
return true;
}

View File

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

View File

@ -37,8 +37,12 @@ namespace vkvm {
lockSharedMemory();
ivt[type].pid = getpid();
ivt[type].signum = signum;
for(int i = 0; i < impl.interruptEntrysPerEventType;i++){
auto &entry= ivt[type * impl.interruptEntrysPerEventType + i];
if (entry.pid == 0) {
entry.pid = getpid();
entry.signum = signum;
impl.eventTable.push_back(handler);
onSignal(signum, [](int sig){
@ -48,11 +52,13 @@ namespace vkvm {
}
}
});
unlockSharedMemory();
return true;
}
}
unlockSharedMemory();
return false;
}
auto setPixel(int x, int y, Color color) -> bool {
char *ptr = getPixelArea() + (y * getWidth() + x) * 3;