Don't crash on FreeBSD when computing stack limits
authorAlex Richardson <arichardson.kde@gmail.com>
Wed, 21 Jan 2015 09:10:01 +0000 (09:10 +0000)
committerRaphael Kubo da Costa <rakuco@FreeBSD.org>
Wed, 28 Jan 2015 16:13:22 +0000 (16:13 +0000)
On FreeBSD pthread_attr_t is a pointer and is dereferenced when calling
pthread_attr_get_np() so if we don't initialize it will probably crash.
This is not a problem on glibc systems since there pthread_attr_t is an
opaque union an doesn't need to be allocated using malloc().

Change-Id: I227685ddf9981974ade08aee8917f7262c301787
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
src/qml/jsruntime/qv4engine.cpp

index 74b262e..5bba745 100644 (file)
@@ -112,7 +112,8 @@ quintptr getStackLimit()
     void* stackBottom = 0;
     pthread_attr_t attr;
 #if HAVE(PTHREAD_NP_H) && OS(FREEBSD)
-    if (pthread_attr_get_np(pthread_self(), &attr) == 0) {
+    // on FreeBSD pthread_attr_init() must be called otherwise getting the attrs crashes
+    if (pthread_attr_init(&attr) == 0 && pthread_attr_get_np(pthread_self(), &attr) == 0) {
 #else
     if (pthread_getattr_np(pthread_self(), &attr) == 0) {
 #endif