summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2018-04-05 10:04:18 +0200
committerfalkTX <falktx@gmail.com>2018-04-05 10:04:18 +0200
commitcc8576a7ab62caab10c7ddd7309367cf797c5e69 (patch)
tree2c80a97a2766562c067b032018f34caf4e57bf75
parent1aeb656a671cde47469809325c7f721b713fc4da (diff)
downloadjack2-cc8576a7ab62caab10c7ddd7309367cf797c5e69.tar.gz
Check mmap() against MAP_FAILED
Fixes #338
-rw-r--r--linux/JackLinuxFutex.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/linux/JackLinuxFutex.cpp b/linux/JackLinuxFutex.cpp
index b724f191..415a8b95 100644
--- a/linux/JackLinuxFutex.cpp
+++ b/linux/JackLinuxFutex.cpp
@@ -147,7 +147,9 @@ bool JackLinuxFutex::Allocate(const char* name, const char* server_name, int val
return false;
}
- if ((fFutex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0)) == NULL) {
+ FutexData* futex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0);
+
+ if (futex == NULL || futex == MAP_FAILED) {
jack_error("Allocate: can't check in named futex name = %s err = %s", fName, strerror(errno));
close(fSharedMem);
fSharedMem = -1;
@@ -157,11 +159,12 @@ bool JackLinuxFutex::Allocate(const char* name, const char* server_name, int val
fPrivate = internal;
- fFutex->futex = value;
- fFutex->internal = internal;
- fFutex->wasInternal = internal;
- fFutex->needsChange = false;
- fFutex->externalCount = 0;
+ futex->futex = value;
+ futex->internal = internal;
+ futex->wasInternal = internal;
+ futex->needsChange = false;
+ futex->externalCount = 0;
+ fFutex = futex;
return true;
}
@@ -182,24 +185,27 @@ bool JackLinuxFutex::Connect(const char* name, const char* server_name)
return false;
}
- if ((fFutex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0)) == NULL) {
+ FutexData* futex = (FutexData*)mmap(NULL, sizeof(FutexData), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fSharedMem, 0);
+
+ if (futex == NULL || futex == MAP_FAILED) {
jack_error("Connect: can't connect named futex name = %s err = %s", fName, strerror(errno));
close(fSharedMem);
fSharedMem = -1;
return false;
}
- if (! fPrivate && fFutex->wasInternal)
+ if (! fPrivate && futex->wasInternal)
{
const char* externalSync = getenv("JACK_INTERNAL_CLIENT_SYNC");
- if (externalSync != NULL && strstr(fName, externalSync) != NULL && ++fFutex->externalCount == 1)
+ if (externalSync != NULL && strstr(fName, externalSync) != NULL && ++futex->externalCount == 1)
{
jack_error("Note: client %s running as external client temporarily", fName);
- fFutex->needsChange = true;
+ futex->needsChange = true;
}
}
+ fFutex = futex;
return true;
}