From 22c9e8b581afd5b531c0d4c2eb799ba23f37a506 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?eray=20or=C3=A7unus?= <erayorcunus@gmail.com>
Date: Fri, 9 Oct 2020 02:19:49 +0300
Subject: [PATCH] Fix POSIX streaming

---
 src/core/CdStreamPosix.cpp | 10 +++++++---
 src/skel/glfw/glfw.cpp     |  5 ++++-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/core/CdStreamPosix.cpp b/src/core/CdStreamPosix.cpp
index 04a5de4b..a6ab62bc 100644
--- a/src/core/CdStreamPosix.cpp
+++ b/src/core/CdStreamPosix.cpp
@@ -240,14 +240,17 @@ CdStreamRead(int32 channel, void *buffer, uint32 offset, uint32 size)
 	CdReadInfo *pChannel = &gpReadInfo[channel];
 	ASSERT( pChannel != nil );
 
-	pChannel->hFile = hImage - 1;
 
 	if ( pChannel->nSectorsToRead != 0 || pChannel->bReading ) {
+		if (pChannel->nSectorOffset == _GET_OFFSET(offset) && pChannel->nSectorsToRead >= size)
+			return STREAM_SUCCESS;
+			
 		flushStream[channel] = 1;
 		CdStreamSync(channel);
 		//return STREAM_NONE;
 	}
 
+	pChannel->hFile = hImage - 1;
 	pChannel->nStatus = STREAM_NONE;
 	pChannel->nSectorOffset = _GET_OFFSET(offset);
 	pChannel->nSectorsToRead = size;
@@ -316,7 +319,7 @@ CdStreamSync(int32 channel)
 	if (flushStream[channel]) {
 #ifdef ONE_THREAD_PER_CHANNEL
 		pChannel->nSectorsToRead = 0;
-		pthread_kill(pChannel->pChannelThread, SIGINT);
+		pthread_kill(pChannel->pChannelThread, SIGUSR1);
 		if (pChannel->bReading) {
 			pChannel->bLocked = true;
 			sem_wait(pChannel->pDoneSemaphore);
@@ -325,8 +328,9 @@ CdStreamSync(int32 channel)
 		pChannel->nSectorsToRead = 0;
 		if (pChannel->bReading) {
 			pChannel->bLocked = true;
-			pthread_kill(_gCdStreamThread, SIGINT);
+			pthread_kill(_gCdStreamThread, SIGUSR1);
 			sem_wait(pChannel->pDoneSemaphore);
+			
 		}
 #endif
 		pChannel->bReading = false;
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp
index 4dd9570e..118ed950 100644
--- a/src/skel/glfw/glfw.cpp
+++ b/src/skel/glfw/glfw.cpp
@@ -1207,7 +1207,9 @@ void terminateHandler(int sig, siginfo_t *info, void *ucontext) {
 }
 
 void dummyHandler(int sig){
+	// Don't kill the app pls
 }
+
 #endif
 
 void resizeCB(GLFWwindow* window, int width, int height) {
@@ -1454,9 +1456,10 @@ main(int argc, char *argv[])
 	act.sa_flags = SA_SIGINFO;
 	sigaction(SIGTERM, &act, NULL);
 	struct sigaction sa;
+	sigemptyset(&sa.sa_mask);
 	sa.sa_handler = dummyHandler;
 	sa.sa_flags = 0;
-	sigaction(SIGINT, &sa, NULL); // Needed for CdStreamPosix
+	sigaction(SIGUSR1, &sa, NULL); // Needed for CdStreamPosix
 #endif
 
 	/*