Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rtWrapper assertion from time time time... #19

Closed
johnrobinsn opened this issue Apr 26, 2015 · 1 comment
Closed

rtWrapper assertion from time time time... #19

johnrobinsn opened this issue Apr 26, 2015 · 1 comment
Assignees

Comments

@johnrobinsn
Copy link
Collaborator

node: ../rtWrapperUtils.cpp:21: void weakCallback_rt2v8(const v8::WeakCallbackData<v8::Object, rtIObject>&): Assertion `p->IsWeak()' failed.
Aborted (core dumped)

I see this intermittently...

and 100% of the time when I reload the current scene with

@johnrobinsn
Copy link
Collaborator Author

I haven't seen this for a long time... closing.

dwrobel referenced this issue in dwrobel/pxCore Jan 31, 2018
Fixes the following data race:
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T1:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImageTexture pxCore/examples/pxScene2d/src/pxContextGL.cpp:1959 (pxscene+0x0000005767fa)
    #6 pxContext::drawImage(float, float, float, float, rtRef<pxTexture>, rtRef<pxTexture>, bool, float*, pxConstantsStretch::constants, pxConstantsStretch::constants, bool) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2649 (pxscene+0x00000057af92)
    #7 pxImage::draw() pxCore/examples/pxScene2d/src/pxImage.cpp:201 (pxscene+0x00000050e8b3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #10 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #11 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #12 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #13 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #14 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #15 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #16 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #17 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #18 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #19 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #20 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #21 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #22 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#23 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#24 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#25 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T2:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImage92 pxCore/examples/pxScene2d/src/pxContextGL.cpp:2076 (pxscene+0x000000577905)
    #6 pxContext::drawImage9(float, float, float, float, float, float, rtRef<pxTexture>) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2580 (pxscene+0x00000057ab36)
    #7 pxImage9::draw() pxCore/examples/pxScene2d/src/pxImage9.cpp:121 (pxscene+0x000000510be3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::createSnapshot(rtRef<pxContextFramebuffer>&, bool, bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1554 (pxscene+0x00000053e004)
    #10 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1336 (pxscene+0x00000053ceea)
    #11 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #12 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #13 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #14 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #15 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #16 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #17 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #18 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #19 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #20 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #21 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #22 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    pxscene#23 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    pxscene#24 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    pxscene#25 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    pxscene#26 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#27 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#28 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#29 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T2 (tid=6655, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x000000f3c3b8 by thread T1 (mutexes: write M256):
    #0 rtMutexNative::lock() pxCore/src/unix/rtMutexNative.cpp:18 (pxscene+0x00000059547f)
    #1 rtThreadQueue::addTask(void (*)(void*, void*), void*, void*) pxCore/src/rtThreadQueue.cpp:31 (pxscene+0x0000005a3c3c)
    #2 cleanupOffscreen(void*) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1164 (pxscene+0x000000575614)
    #3 rtThreadTask::execute() pxCore/src/rtThreadTask.cpp:38 (pxscene+0x0000005a7850)
    #4 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:87 (pxscene+0x000000595bbf)
    #5 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #6 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x000000f3c3b8 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadQueue::process(double) pxCore/src/rtThreadQueue.cpp:73 (pxscene+0x0000005a3f18)
    #2 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2264 (pxscene+0x0000005423bf)
    #3 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #4 pxViewContainer::update(double) pxCore/examples/pxScene2d/src/pxScene2d.h:969 (pxscene+0x000000558ece)
    #5 pxObject::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1098 (pxscene+0x00000053c063)
    #6 pxScene2d::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2406 (pxscene+0x000000542cef)
    #7 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2273 (pxscene+0x00000054244d)
    #8 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is global 'gUIThreadQueue' of size 128 at 0x000000f3c340 (pxscene+0x000000f3c3b8)

  Mutex M256 (0x000000f3c390) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x0000005953f8)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e41d8)
    #3 rtThreadQueue::rtThreadQueue() pxCore/src/rtThreadQueue.cpp:26 (pxscene+0x0000005a3b98)
    #4 __static_initialization_and_destruction_0 pxCore/examples/pxScene2d/src/pxContextGL.cpp:127 (pxscene+0x00000057c68a)
    #5 _GLOBAL__sub_I_pxContextGL.cpp pxCore/examples/pxScene2d/src/pxContextGL.cpp:2994 (pxscene+0x00000057c754)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:18 in rtMutexNative::lock()
==================
rt: WARN pxScene2d.cpp:2323 -- Thread-6652: pxScene fps: 12  (below warn threshold of 25)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=6652)
  Cycle in lock order graph: M359 (0x7b1400000550) => M516 (0x00000091cde0) => M359

  Mutex M516 acquired here while holding mutex M359 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M359 acquired here while holding mutex M516 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 v8::internal::ThreadManager::Lock() ../deps/v8/src/v8threads.cc:154 (libnode.so.48+0x000000b3f610)
    #2 rtEmit::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:130 (pxscene+0x00000060620c)
    #3 rtEmitRef::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:163 (pxscene+0x0000006063a8)
    #4 rtFunctionBase::Send(int, rtValue const*) pxCore/src/rtObject.h:220 (pxscene+0x000000609109)
    #5 rtFunctionBase::send(rtValue const&, rtValue const&) pxCore/src/rtObject.cpp:510 (pxscene+0x000000607ebb)
    #6 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2343 (pxscene+0x000000542992)
    #7 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #8 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #9 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #10 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #11 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #12 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #13 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #14 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/lib64/libtsan.so.0+0x3b62e) in pthread_mutex_lock
dwrobel referenced this issue in dwrobel/pxCore Jan 31, 2018
Fixes the following data race:
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T1:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImageTexture pxCore/examples/pxScene2d/src/pxContextGL.cpp:1959 (pxscene+0x0000005767fa)
    #6 pxContext::drawImage(float, float, float, float, rtRef<pxTexture>, rtRef<pxTexture>, bool, float*, pxConstantsStretch::constants, pxConstantsStretch::constants, bool) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2649 (pxscene+0x00000057af92)
    #7 pxImage::draw() pxCore/examples/pxScene2d/src/pxImage.cpp:201 (pxscene+0x00000050e8b3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #10 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #11 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #12 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #13 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #14 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #15 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #16 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #17 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #18 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #19 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #20 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #21 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #22 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#23 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#24 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#25 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T2:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImage92 pxCore/examples/pxScene2d/src/pxContextGL.cpp:2076 (pxscene+0x000000577905)
    #6 pxContext::drawImage9(float, float, float, float, float, float, rtRef<pxTexture>) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2580 (pxscene+0x00000057ab36)
    #7 pxImage9::draw() pxCore/examples/pxScene2d/src/pxImage9.cpp:121 (pxscene+0x000000510be3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::createSnapshot(rtRef<pxContextFramebuffer>&, bool, bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1554 (pxscene+0x00000053e004)
    #10 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1336 (pxscene+0x00000053ceea)
    #11 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #12 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #13 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #14 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #15 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #16 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #17 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #18 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #19 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #20 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #21 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #22 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    pxscene#23 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    pxscene#24 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    pxscene#25 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    pxscene#26 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#27 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#28 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#29 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T2 (tid=6655, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x000000f3c3b8 by thread T1 (mutexes: write M256):
    #0 rtMutexNative::lock() pxCore/src/unix/rtMutexNative.cpp:18 (pxscene+0x00000059547f)
    #1 rtThreadQueue::addTask(void (*)(void*, void*), void*, void*) pxCore/src/rtThreadQueue.cpp:31 (pxscene+0x0000005a3c3c)
    #2 cleanupOffscreen(void*) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1164 (pxscene+0x000000575614)
    #3 rtThreadTask::execute() pxCore/src/rtThreadTask.cpp:38 (pxscene+0x0000005a7850)
    #4 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:87 (pxscene+0x000000595bbf)
    #5 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #6 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x000000f3c3b8 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadQueue::process(double) pxCore/src/rtThreadQueue.cpp:73 (pxscene+0x0000005a3f18)
    #2 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2264 (pxscene+0x0000005423bf)
    #3 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #4 pxViewContainer::update(double) pxCore/examples/pxScene2d/src/pxScene2d.h:969 (pxscene+0x000000558ece)
    #5 pxObject::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1098 (pxscene+0x00000053c063)
    #6 pxScene2d::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2406 (pxscene+0x000000542cef)
    #7 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2273 (pxscene+0x00000054244d)
    #8 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is global 'gUIThreadQueue' of size 128 at 0x000000f3c340 (pxscene+0x000000f3c3b8)

  Mutex M256 (0x000000f3c390) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x0000005953f8)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e41d8)
    #3 rtThreadQueue::rtThreadQueue() pxCore/src/rtThreadQueue.cpp:26 (pxscene+0x0000005a3b98)
    #4 __static_initialization_and_destruction_0 pxCore/examples/pxScene2d/src/pxContextGL.cpp:127 (pxscene+0x00000057c68a)
    #5 _GLOBAL__sub_I_pxContextGL.cpp pxCore/examples/pxScene2d/src/pxContextGL.cpp:2994 (pxscene+0x00000057c754)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:18 in rtMutexNative::lock()
==================
rt: WARN pxScene2d.cpp:2323 -- Thread-6652: pxScene fps: 12  (below warn threshold of 25)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=6652)
  Cycle in lock order graph: M359 (0x7b1400000550) => M516 (0x00000091cde0) => M359

  Mutex M516 acquired here while holding mutex M359 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M359 acquired here while holding mutex M516 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 v8::internal::ThreadManager::Lock() ../deps/v8/src/v8threads.cc:154 (libnode.so.48+0x000000b3f610)
    #2 rtEmit::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:130 (pxscene+0x00000060620c)
    #3 rtEmitRef::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:163 (pxscene+0x0000006063a8)
    #4 rtFunctionBase::Send(int, rtValue const*) pxCore/src/rtObject.h:220 (pxscene+0x000000609109)
    #5 rtFunctionBase::send(rtValue const&, rtValue const&) pxCore/src/rtObject.cpp:510 (pxscene+0x000000607ebb)
    #6 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2343 (pxscene+0x000000542992)
    #7 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #8 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #9 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #10 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #11 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #12 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #13 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #14 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/lib64/libtsan.so.0+0x3b62e) in pthread_mutex_lock
dwrobel referenced this issue in dwrobel/pxCore Jan 31, 2018
Fixes the following data race:
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T1:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImageTexture pxCore/examples/pxScene2d/src/pxContextGL.cpp:1959 (pxscene+0x0000005767fa)
    #6 pxContext::drawImage(float, float, float, float, rtRef<pxTexture>, rtRef<pxTexture>, bool, float*, pxConstantsStretch::constants, pxConstantsStretch::constants, bool) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2649 (pxscene+0x00000057af92)
    #7 pxImage::draw() pxCore/examples/pxScene2d/src/pxImage.cpp:201 (pxscene+0x00000050e8b3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #10 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #11 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #12 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #13 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #14 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #15 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #16 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #17 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #18 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #19 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #20 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #21 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #22 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#23 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#24 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#25 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T2:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImage92 pxCore/examples/pxScene2d/src/pxContextGL.cpp:2076 (pxscene+0x000000577905)
    #6 pxContext::drawImage9(float, float, float, float, float, float, rtRef<pxTexture>) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2580 (pxscene+0x00000057ab36)
    #7 pxImage9::draw() pxCore/examples/pxScene2d/src/pxImage9.cpp:121 (pxscene+0x000000510be3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::createSnapshot(rtRef<pxContextFramebuffer>&, bool, bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1554 (pxscene+0x00000053e004)
    #10 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1336 (pxscene+0x00000053ceea)
    #11 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #12 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #13 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #14 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #15 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #16 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #17 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #18 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #19 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #20 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #21 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #22 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    pxscene#23 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    pxscene#24 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    pxscene#25 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    pxscene#26 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#27 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#28 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#29 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T2 (tid=6655, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x000000f3c3b8 by thread T1 (mutexes: write M256):
    #0 rtMutexNative::lock() pxCore/src/unix/rtMutexNative.cpp:18 (pxscene+0x00000059547f)
    #1 rtThreadQueue::addTask(void (*)(void*, void*), void*, void*) pxCore/src/rtThreadQueue.cpp:31 (pxscene+0x0000005a3c3c)
    #2 cleanupOffscreen(void*) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1164 (pxscene+0x000000575614)
    #3 rtThreadTask::execute() pxCore/src/rtThreadTask.cpp:38 (pxscene+0x0000005a7850)
    #4 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:87 (pxscene+0x000000595bbf)
    #5 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #6 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x000000f3c3b8 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadQueue::process(double) pxCore/src/rtThreadQueue.cpp:73 (pxscene+0x0000005a3f18)
    #2 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2264 (pxscene+0x0000005423bf)
    #3 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #4 pxViewContainer::update(double) pxCore/examples/pxScene2d/src/pxScene2d.h:969 (pxscene+0x000000558ece)
    #5 pxObject::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1098 (pxscene+0x00000053c063)
    #6 pxScene2d::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2406 (pxscene+0x000000542cef)
    #7 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2273 (pxscene+0x00000054244d)
    #8 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is global 'gUIThreadQueue' of size 128 at 0x000000f3c340 (pxscene+0x000000f3c3b8)

  Mutex M256 (0x000000f3c390) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x0000005953f8)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e41d8)
    #3 rtThreadQueue::rtThreadQueue() pxCore/src/rtThreadQueue.cpp:26 (pxscene+0x0000005a3b98)
    #4 __static_initialization_and_destruction_0 pxCore/examples/pxScene2d/src/pxContextGL.cpp:127 (pxscene+0x00000057c68a)
    #5 _GLOBAL__sub_I_pxContextGL.cpp pxCore/examples/pxScene2d/src/pxContextGL.cpp:2994 (pxscene+0x00000057c754)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:18 in rtMutexNative::lock()
==================
rt: WARN pxScene2d.cpp:2323 -- Thread-6652: pxScene fps: 12  (below warn threshold of 25)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=6652)
  Cycle in lock order graph: M359 (0x7b1400000550) => M516 (0x00000091cde0) => M359

  Mutex M516 acquired here while holding mutex M359 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M359 acquired here while holding mutex M516 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 v8::internal::ThreadManager::Lock() ../deps/v8/src/v8threads.cc:154 (libnode.so.48+0x000000b3f610)
    #2 rtEmit::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:130 (pxscene+0x00000060620c)
    #3 rtEmitRef::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:163 (pxscene+0x0000006063a8)
    #4 rtFunctionBase::Send(int, rtValue const*) pxCore/src/rtObject.h:220 (pxscene+0x000000609109)
    #5 rtFunctionBase::send(rtValue const&, rtValue const&) pxCore/src/rtObject.cpp:510 (pxscene+0x000000607ebb)
    #6 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2343 (pxscene+0x000000542992)
    #7 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #8 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #9 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #10 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #11 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #12 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #13 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #14 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/lib64/libtsan.so.0+0x3b62e) in pthread_mutex_lock
dwrobel referenced this issue in dwrobel/pxCore Jan 31, 2018
Fixes the following data race:
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T1:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImageTexture pxCore/examples/pxScene2d/src/pxContextGL.cpp:1959 (pxscene+0x0000005767fa)
    #6 pxContext::drawImage(float, float, float, float, rtRef<pxTexture>, rtRef<pxTexture>, bool, float*, pxConstantsStretch::constants, pxConstantsStretch::constants, bool) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2649 (pxscene+0x00000057af92)
    #7 pxImage::draw() pxCore/examples/pxScene2d/src/pxImage.cpp:201 (pxscene+0x00000050e8b3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #10 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #11 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #12 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #13 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #14 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #15 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #16 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #17 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #18 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #19 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #20 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #21 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #22 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#23 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#24 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#25 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T2:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImage92 pxCore/examples/pxScene2d/src/pxContextGL.cpp:2076 (pxscene+0x000000577905)
    #6 pxContext::drawImage9(float, float, float, float, float, float, rtRef<pxTexture>) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2580 (pxscene+0x00000057ab36)
    #7 pxImage9::draw() pxCore/examples/pxScene2d/src/pxImage9.cpp:121 (pxscene+0x000000510be3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::createSnapshot(rtRef<pxContextFramebuffer>&, bool, bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1554 (pxscene+0x00000053e004)
    #10 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1336 (pxscene+0x00000053ceea)
    #11 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #12 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #13 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #14 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #15 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #16 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #17 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #18 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #19 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #20 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #21 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #22 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    pxscene#23 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    pxscene#24 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    pxscene#25 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    pxscene#26 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#27 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#28 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#29 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T2 (tid=6655, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x000000f3c3b8 by thread T1 (mutexes: write M256):
    #0 rtMutexNative::lock() pxCore/src/unix/rtMutexNative.cpp:18 (pxscene+0x00000059547f)
    #1 rtThreadQueue::addTask(void (*)(void*, void*), void*, void*) pxCore/src/rtThreadQueue.cpp:31 (pxscene+0x0000005a3c3c)
    #2 cleanupOffscreen(void*) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1164 (pxscene+0x000000575614)
    #3 rtThreadTask::execute() pxCore/src/rtThreadTask.cpp:38 (pxscene+0x0000005a7850)
    #4 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:87 (pxscene+0x000000595bbf)
    #5 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #6 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x000000f3c3b8 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadQueue::process(double) pxCore/src/rtThreadQueue.cpp:73 (pxscene+0x0000005a3f18)
    #2 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2264 (pxscene+0x0000005423bf)
    #3 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #4 pxViewContainer::update(double) pxCore/examples/pxScene2d/src/pxScene2d.h:969 (pxscene+0x000000558ece)
    #5 pxObject::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1098 (pxscene+0x00000053c063)
    #6 pxScene2d::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2406 (pxscene+0x000000542cef)
    #7 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2273 (pxscene+0x00000054244d)
    #8 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is global 'gUIThreadQueue' of size 128 at 0x000000f3c340 (pxscene+0x000000f3c3b8)

  Mutex M256 (0x000000f3c390) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x0000005953f8)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e41d8)
    #3 rtThreadQueue::rtThreadQueue() pxCore/src/rtThreadQueue.cpp:26 (pxscene+0x0000005a3b98)
    #4 __static_initialization_and_destruction_0 pxCore/examples/pxScene2d/src/pxContextGL.cpp:127 (pxscene+0x00000057c68a)
    #5 _GLOBAL__sub_I_pxContextGL.cpp pxCore/examples/pxScene2d/src/pxContextGL.cpp:2994 (pxscene+0x00000057c754)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:18 in rtMutexNative::lock()
==================
rt: WARN pxScene2d.cpp:2323 -- Thread-6652: pxScene fps: 12  (below warn threshold of 25)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=6652)
  Cycle in lock order graph: M359 (0x7b1400000550) => M516 (0x00000091cde0) => M359

  Mutex M516 acquired here while holding mutex M359 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M359 acquired here while holding mutex M516 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 v8::internal::ThreadManager::Lock() ../deps/v8/src/v8threads.cc:154 (libnode.so.48+0x000000b3f610)
    #2 rtEmit::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:130 (pxscene+0x00000060620c)
    #3 rtEmitRef::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:163 (pxscene+0x0000006063a8)
    #4 rtFunctionBase::Send(int, rtValue const*) pxCore/src/rtObject.h:220 (pxscene+0x000000609109)
    #5 rtFunctionBase::send(rtValue const&, rtValue const&) pxCore/src/rtObject.cpp:510 (pxscene+0x000000607ebb)
    #6 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2343 (pxscene+0x000000542992)
    #7 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #8 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #9 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #10 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #11 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #12 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #13 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #14 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/lib64/libtsan.so.0+0x3b62e) in pthread_mutex_lock
dwrobel referenced this issue in dwrobel/pxCore Jan 31, 2018
Fixes the following data race:
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T1:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImageTexture pxCore/examples/pxScene2d/src/pxContextGL.cpp:1959 (pxscene+0x0000005767fa)
    #6 pxContext::drawImage(float, float, float, float, rtRef<pxTexture>, rtRef<pxTexture>, bool, float*, pxConstantsStretch::constants, pxConstantsStretch::constants, bool) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2649 (pxscene+0x00000057af92)
    #7 pxImage::draw() pxCore/examples/pxScene2d/src/pxImage.cpp:201 (pxscene+0x00000050e8b3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #10 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #11 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #12 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #13 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #14 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #15 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #16 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #17 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #18 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #19 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #20 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #21 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #22 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#23 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#24 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#25 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T2:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImage92 pxCore/examples/pxScene2d/src/pxContextGL.cpp:2076 (pxscene+0x000000577905)
    #6 pxContext::drawImage9(float, float, float, float, float, float, rtRef<pxTexture>) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2580 (pxscene+0x00000057ab36)
    #7 pxImage9::draw() pxCore/examples/pxScene2d/src/pxImage9.cpp:121 (pxscene+0x000000510be3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::createSnapshot(rtRef<pxContextFramebuffer>&, bool, bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1554 (pxscene+0x00000053e004)
    #10 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1336 (pxscene+0x00000053ceea)
    #11 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #12 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #13 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #14 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #15 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #16 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #17 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #18 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #19 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #20 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #21 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #22 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    pxscene#23 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    pxscene#24 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    pxscene#25 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    pxscene#26 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    pxscene#27 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    pxscene#28 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    pxscene#29 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T2 (tid=6655, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x000000f3c3b8 by thread T1 (mutexes: write M256):
    #0 rtMutexNative::lock() pxCore/src/unix/rtMutexNative.cpp:18 (pxscene+0x00000059547f)
    #1 rtThreadQueue::addTask(void (*)(void*, void*), void*, void*) pxCore/src/rtThreadQueue.cpp:31 (pxscene+0x0000005a3c3c)
    #2 cleanupOffscreen(void*) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1164 (pxscene+0x000000575614)
    #3 rtThreadTask::execute() pxCore/src/rtThreadTask.cpp:38 (pxscene+0x0000005a7850)
    #4 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:87 (pxscene+0x000000595bbf)
    #5 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #6 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x000000f3c3b8 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadQueue::process(double) pxCore/src/rtThreadQueue.cpp:73 (pxscene+0x0000005a3f18)
    #2 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2264 (pxscene+0x0000005423bf)
    #3 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #4 pxViewContainer::update(double) pxCore/examples/pxScene2d/src/pxScene2d.h:969 (pxscene+0x000000558ece)
    #5 pxObject::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1098 (pxscene+0x00000053c063)
    #6 pxScene2d::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2406 (pxscene+0x000000542cef)
    #7 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2273 (pxscene+0x00000054244d)
    #8 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is global 'gUIThreadQueue' of size 128 at 0x000000f3c340 (pxscene+0x000000f3c3b8)

  Mutex M256 (0x000000f3c390) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x0000005953f8)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e41d8)
    #3 rtThreadQueue::rtThreadQueue() pxCore/src/rtThreadQueue.cpp:26 (pxscene+0x0000005a3b98)
    #4 __static_initialization_and_destruction_0 pxCore/examples/pxScene2d/src/pxContextGL.cpp:127 (pxscene+0x00000057c68a)
    #5 _GLOBAL__sub_I_pxContextGL.cpp pxCore/examples/pxScene2d/src/pxContextGL.cpp:2994 (pxscene+0x00000057c754)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:18 in rtMutexNative::lock()
==================
rt: WARN pxScene2d.cpp:2323 -- Thread-6652: pxScene fps: 12  (below warn threshold of 25)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=6652)
  Cycle in lock order graph: M359 (0x7b1400000550) => M516 (0x00000091cde0) => M359

  Mutex M516 acquired here while holding mutex M359 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M359 acquired here while holding mutex M516 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 v8::internal::ThreadManager::Lock() ../deps/v8/src/v8threads.cc:154 (libnode.so.48+0x000000b3f610)
    #2 rtEmit::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:130 (pxscene+0x00000060620c)
    #3 rtEmitRef::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:163 (pxscene+0x0000006063a8)
    #4 rtFunctionBase::Send(int, rtValue const*) pxCore/src/rtObject.h:220 (pxscene+0x000000609109)
    #5 rtFunctionBase::send(rtValue const&, rtValue const&) pxCore/src/rtObject.cpp:510 (pxscene+0x000000607ebb)
    #6 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2343 (pxscene+0x000000542992)
    #7 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #8 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #9 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #10 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #11 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #12 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #13 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #14 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/lib64/libtsan.so.0+0x3b62e) in pthread_mutex_lock
mfiess pushed a commit that referenced this issue Feb 2, 2018
Fixes the following data race:
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T1:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImageTexture pxCore/examples/pxScene2d/src/pxContextGL.cpp:1959 (pxscene+0x0000005767fa)
    #6 pxContext::drawImage(float, float, float, float, rtRef<pxTexture>, rtRef<pxTexture>, bool, float*, pxConstantsStretch::constants, pxConstantsStretch::constants, bool) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2649 (pxscene+0x00000057af92)
    #7 pxImage::draw() pxCore/examples/pxScene2d/src/pxImage.cpp:201 (pxscene+0x00000050e8b3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #10 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #11 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #12 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #13 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #14 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #15 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #16 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #17 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #18 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #19 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #20 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #21 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #22 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #23 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #24 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #25 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x7b3400000030 by thread T2:
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:83 (pxscene+0x000000595ba8)
    #2 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #3 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b3400000030 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadPoolNative::executeTask(rtThreadTask*) pxCore/src/unix/rtThreadPoolNative.cpp:99 (pxscene+0x000000595c60)
    #2 pxTextureOffscreen::freeOffscreenDataInBackground() pxCore/examples/pxScene2d/src/pxContextGL.cpp:873 (pxscene+0x00000057fd70)
    #3 pxTextureOffscreen::bindGLTexture(int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:765 (pxscene+0x00000057f576)
    #4 textureShaderProgram::draw(int, int, float*, float, int, void const*, void const*, rtRef<pxTexture>, int, int) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1619 (pxscene+0x000000582280)
    #5 drawImage92 pxCore/examples/pxScene2d/src/pxContextGL.cpp:2076 (pxscene+0x000000577905)
    #6 pxContext::drawImage9(float, float, float, float, float, float, rtRef<pxTexture>) pxCore/examples/pxScene2d/src/pxContextGL.cpp:2580 (pxscene+0x00000057ab36)
    #7 pxImage9::draw() pxCore/examples/pxScene2d/src/pxImage9.cpp:121 (pxscene+0x000000510be3)
    #8 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #9 pxObject::createSnapshot(rtRef<pxContextFramebuffer>&, bool, bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1554 (pxscene+0x00000053e004)
    #10 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1336 (pxscene+0x00000053ceea)
    #11 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #12 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #13 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #14 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #15 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #16 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #17 pxViewContainer::draw() pxCore/examples/pxScene2d/src/pxScene2d.h:976 (pxscene+0x000000558f7a)
    #18 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1355 (pxscene+0x00000053d11e)
    #19 pxObject::drawInternal(bool) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1367 (pxscene+0x00000053d1ca)
    #20 pxScene2d::draw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2190 (pxscene+0x0000005420a4)
    #21 pxScene2d::onDraw() pxCore/examples/pxScene2d/src/pxScene2d.cpp:2376 (pxscene+0x000000542ba9)
    #22 pxScriptView::onDraw() <null> (pxscene+0x00000055ac4a)
    #23 sceneWindow::onDraw(pxSurfaceNativeDesc*) pxCore/examples/pxScene2d/src/pxScene.cpp:357 (pxscene+0x0000005952b0)
    #24 pxWindowNative::drawFrame() pxCore/src/wayland_egl/pxWindowNative.cpp:883 (pxscene+0x00000059e685)
    #25 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:844 (pxscene+0x00000059e3e8)
    #26 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #27 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #28 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #29 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is heap block of size 208 at 0x7b3400000000 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ad5)
    #2 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #3 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T2 (tid=6655, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:24 in rtMutexNative::unlock()
==================
==================
WARNING: ThreadSanitizer: data race (pid=6652)
  Write of size 1 at 0x000000f3c3b8 by thread T1 (mutexes: write M256):
    #0 rtMutexNative::lock() pxCore/src/unix/rtMutexNative.cpp:18 (pxscene+0x00000059547f)
    #1 rtThreadQueue::addTask(void (*)(void*, void*), void*, void*) pxCore/src/rtThreadQueue.cpp:31 (pxscene+0x0000005a3c3c)
    #2 cleanupOffscreen(void*) pxCore/examples/pxScene2d/src/pxContextGL.cpp:1164 (pxscene+0x000000575614)
    #3 rtThreadTask::execute() pxCore/src/rtThreadTask.cpp:38 (pxscene+0x0000005a7850)
    #4 rtThreadPoolNative::startThread() pxCore/src/unix/rtThreadPoolNative.cpp:87 (pxscene+0x000000595bbf)
    #5 launchThread(void*) pxCore/src/unix/rtThreadPoolNative.cpp:9 (pxscene+0x0000005956a4)
    #6 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x000000f3c3b8 by main thread (mutexes: write M516):
    #0 rtMutexNative::unlock() pxCore/src/unix/rtMutexNative.cpp:24 (pxscene+0x0000005954c3)
    #1 rtThreadQueue::process(double) pxCore/src/rtThreadQueue.cpp:73 (pxscene+0x0000005a3f18)
    #2 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2264 (pxscene+0x0000005423bf)
    #3 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #4 pxViewContainer::update(double) pxCore/examples/pxScene2d/src/pxScene2d.h:969 (pxscene+0x000000558ece)
    #5 pxObject::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1098 (pxscene+0x00000053c063)
    #6 pxScene2d::update(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2406 (pxscene+0x000000542cef)
    #7 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2273 (pxscene+0x00000054244d)
    #8 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Location is global 'gUIThreadQueue' of size 128 at 0x000000f3c340 (pxscene+0x000000f3c3b8)

  Mutex M256 (0x000000f3c390) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x0000005953f8)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e41d8)
    #3 rtThreadQueue::rtThreadQueue() pxCore/src/rtThreadQueue.cpp:26 (pxscene+0x0000005a3b98)
    #4 __static_initialization_and_destruction_0 pxCore/examples/pxScene2d/src/pxContextGL.cpp:127 (pxscene+0x00000057c68a)
    #5 _GLOBAL__sub_I_pxContextGL.cpp pxCore/examples/pxScene2d/src/pxContextGL.cpp:2994 (pxscene+0x00000057c754)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

  Mutex M516 (0x00000091cde0) created at:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

  Thread T1 (tid=6654, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 rtThreadPoolNative::initialize() pxCore/src/unix/rtThreadPoolNative.cpp:35 (pxscene+0x0000005958dd)
    #2 rtThreadPoolNative::rtThreadPoolNative(int) pxCore/src/unix/rtThreadPoolNative.cpp:17 (pxscene+0x000000595762)
    #3 rtThreadPool::rtThreadPool(int) pxCore/src/rtThreadPool.cpp:31 (pxscene+0x0000005a393e)
    #4 __static_initialization_and_destruction_0 pxCore/src/rtThreadPool.cpp:28 (pxscene+0x0000005a3ae5)
    #5 _GLOBAL__sub_I_rtThreadPool.cpp pxCore/src/rtThreadPool.cpp:50 (pxscene+0x0000005a3b50)
    #6 __libc_csu_init <null> (pxscene+0x00000068f53c)

SUMMARY: ThreadSanitizer: data race pxCore/src/unix/rtMutexNative.cpp:18 in rtMutexNative::lock()
==================
rt: WARN pxScene2d.cpp:2323 -- Thread-6652: pxScene fps: 12  (below warn threshold of 25)
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=6652)
  Cycle in lock order graph: M359 (0x7b1400000550) => M516 (0x00000091cde0) => M359

  Mutex M516 acquired here while holding mutex M359 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 rtWrapperSceneUpdateEnter() pxCore/src/rtScript.cpp:108 (pxscene+0x0000005b7501)
    #2 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:225 (pxscene+0x0000005cb967)
    #3 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005842c2)
    #4 pxScriptView::pxScriptView(char const*, char const*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3424 (pxscene+0x0000005497da)
    #5 sceneWindow::init(int, int, int, int, char const*) pxCore/examples/pxScene2d/src/pxScene.cpp:169 (pxscene+0x000000594716)
    #6 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:534 (pxscene+0x000000593dc4)
    #7 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M359 acquired here while holding mutex M516 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x00000003b62e)
    #1 v8::internal::ThreadManager::Lock() ../deps/v8/src/v8threads.cc:154 (libnode.so.48+0x000000b3f610)
    #2 rtEmit::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:130 (pxscene+0x00000060620c)
    #3 rtEmitRef::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:163 (pxscene+0x0000006063a8)
    #4 rtFunctionBase::Send(int, rtValue const*) pxCore/src/rtObject.h:220 (pxscene+0x000000609109)
    #5 rtFunctionBase::send(rtValue const&, rtValue const&) pxCore/src/rtObject.cpp:510 (pxscene+0x000000607ebb)
    #6 pxScene2d::onUpdate(double) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2343 (pxscene+0x000000542992)
    #7 pxScriptView::onUpdate(double) <null> (pxscene+0x00000055abbc)
    #8 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:365 (pxscene+0x000000595348)
    #9 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x00000059d1c6)
    #10 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x00000059e49c)
    #11 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x00000059d792)
    #12 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a1969)
    #13 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:618 (pxscene+0x000000593e23)
    #14 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a19f7)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/lib64/libtsan.so.0+0x3b62e) in pthread_mutex_lock
dwrobel referenced this issue in dwrobel/pxCore Feb 15, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 15, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 16, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 19, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 20, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 21, 2018
Backtrace before (note that it causes stack-overflow):
 (gdb) bt
 #0  sincosf (x=-6.16183472, s=s@entry=0x7fffd382066c, c=c@entry=0x7fffd3820668) at pxCore/src/pxMatrix4T.cpp:28
 #1  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382069c, c=c@entry=0x7fffd3820698) at pxCore/src/pxMatrix4T.cpp:28
 #2  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206cc, c=c@entry=0x7fffd38206c8) at pxCore/src/pxMatrix4T.cpp:28
 #3  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206fc, c=c@entry=0x7fffd38206f8) at pxCore/src/pxMatrix4T.cpp:28
 #4  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382072c, c=c@entry=0x7fffd3820728) at pxCore/src/pxMatrix4T.cpp:28
 #5  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382075c, c=c@entry=0x7fffd3820758) at pxCore/src/pxMatrix4T.cpp:28
 #6  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382078c, c=c@entry=0x7fffd3820788) at pxCore/src/pxMatrix4T.cpp:28
 #7  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207bc, c=c@entry=0x7fffd38207b8) at pxCore/src/pxMatrix4T.cpp:28
 #8  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207ec, c=c@entry=0x7fffd38207e8) at pxCore/src/pxMatrix4T.cpp:28
 #9  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382081c, c=c@entry=0x7fffd3820818) at pxCore/src/pxMatrix4T.cpp:28
 #10 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382084c, c=c@entry=0x7fffd3820848) at pxCore/src/pxMatrix4T.cpp:28
 #11 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382087c, c=c@entry=0x7fffd3820878) at pxCore/src/pxMatrix4T.cpp:28
 #12 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208ac, c=c@entry=0x7fffd38208a8) at pxCore/src/pxMatrix4T.cpp:28
 #13 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208dc, c=c@entry=0x7fffd38208d8) at pxCore/src/pxMatrix4T.cpp:28
 #14 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382090c, c=c@entry=0x7fffd3820908) at pxCore/src/pxMatrix4T.cpp:28
 #15 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382094c, c=c@entry=0x7fffd3820948) at pxCore/src/pxMatrix4T.cpp:28
 #16 0x00000000004614bc in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #17 pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #18 pxObject::applyMatrix (this=0x1d3ab80, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #19 0x000000000048b9e1 in pxObject::drawInternal (this=0x1d3ab80, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #20 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc790, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #21 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #22 0x000000000048bad6 in pxObject::drawInternal (this=0x1d0ed70, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#23 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc280, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#24 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#25 0x000000000048bad6 in pxObject::drawInternal (this=0x1c620b0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#26 0x000000000048bf02 in pxObject::drawInternal (this=0x1786380, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#27 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#28 0x00000000004b11e1 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 pxscene#29 0x0000000000486df4 in pxScene2d::onUpdate (this=0x1786190, t=1519218877) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 pxscene#30 0x00000000004affb8 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 pxscene#31 0x00000000004b063a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#32 0x00007fba9acf92e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#33 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#34 0x00007fba9acf93d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#35 0x00000000004afb98 in pxMain (argc=<optimized out>, argv=0x7fffd3821458) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#36 0x00007fba9a02200a in __libc_start_main (main=0x45b150 <main(int, char**)>, argc=2, argv=0x7fffd3821458, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd3821448) at ../csu/libc-start.c:308
 pxscene#37 0x000000000045b90a in _start ()

Backtrace after (x86_64 platform):
(gdb) bt
 #0  sincosf () at ../sysdeps/x86_64/fpu/s_sincosf.S:77 <-- built-in version
 #1  0x000000000046150c in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #2  pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #3  pxObject::applyMatrix (this=0x340f610, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #4  0x000000000048ba31 in pxObject::drawInternal (this=0x340f610, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #5  0x000000000048bf52 in pxObject::drawInternal (this=0x3458940, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #6  0x000000000048bf52 in pxObject::drawInternal (this=0x33b5c30, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #7  0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #8  0x000000000048c5f7 in pxObject::createSnapshot (this=this@entry=0x34a92f0, fbo=..., separateContext=separateContext@entry=false, antiAliasing=antiAliasing@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1556
 #9  0x000000000048bdb3 in pxObject::drawInternal (this=0x34a92f0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1343
 #10 0x000000000048bf52 in pxObject::drawInternal (this=0x3484670, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #11 0x000000000048bf52 in pxObject::drawInternal (this=0x33b5ab0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #12 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #13 0x000000000048bb26 in pxObject::drawInternal (this=0x3432b50, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #14 0x000000000048bf52 in pxObject::drawInternal (this=0x33b51a0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #15 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #16 0x000000000048bb26 in pxObject::drawInternal (this=0x3396d60, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #17 0x000000000048bf52 in pxObject::drawInternal (this=0x2e444b0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #18 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #19 0x00000000004b1231 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #20 0x0000000000486e44 in pxScene2d::onUpdate (this=0x2e5f7b0, t=1519220497) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #21 0x00000000004b0008 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #22 0x00000000004b068a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#23 0x00007f830a0c72e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#24 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#25 0x00007f830a0c73d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#26 0x00000000004afbe8 in pxMain (argc=<optimized out>, argv=0x7ffe4b7e2de8) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#27 0x00007f83093f000a in __libc_start_main (main=0x45b1a0 <main(int, char**)>, argc=2, argv=0x7ffe4b7e2de8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe4b7e2dd8) at ../csu/libc-start.c:308
 pxscene#28 0x000000000045b95a in _start ()
dwrobel referenced this issue in dwrobel/pxCore Feb 21, 2018
Backtrace before (note that it causes stack-overflow):
 (gdb) bt
 #0  sincosf (x=-6.16183472, s=s@entry=0x7fffd382066c, c=c@entry=0x7fffd3820668) at pxCore/src/pxMatrix4T.cpp:28
 #1  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382069c, c=c@entry=0x7fffd3820698) at pxCore/src/pxMatrix4T.cpp:28
 #2  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206cc, c=c@entry=0x7fffd38206c8) at pxCore/src/pxMatrix4T.cpp:28
 #3  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206fc, c=c@entry=0x7fffd38206f8) at pxCore/src/pxMatrix4T.cpp:28
 #4  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382072c, c=c@entry=0x7fffd3820728) at pxCore/src/pxMatrix4T.cpp:28
 #5  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382075c, c=c@entry=0x7fffd3820758) at pxCore/src/pxMatrix4T.cpp:28
 #6  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382078c, c=c@entry=0x7fffd3820788) at pxCore/src/pxMatrix4T.cpp:28
 #7  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207bc, c=c@entry=0x7fffd38207b8) at pxCore/src/pxMatrix4T.cpp:28
 #8  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207ec, c=c@entry=0x7fffd38207e8) at pxCore/src/pxMatrix4T.cpp:28
 #9  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382081c, c=c@entry=0x7fffd3820818) at pxCore/src/pxMatrix4T.cpp:28
 #10 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382084c, c=c@entry=0x7fffd3820848) at pxCore/src/pxMatrix4T.cpp:28
 #11 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382087c, c=c@entry=0x7fffd3820878) at pxCore/src/pxMatrix4T.cpp:28
 #12 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208ac, c=c@entry=0x7fffd38208a8) at pxCore/src/pxMatrix4T.cpp:28
 #13 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208dc, c=c@entry=0x7fffd38208d8) at pxCore/src/pxMatrix4T.cpp:28
 #14 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382090c, c=c@entry=0x7fffd3820908) at pxCore/src/pxMatrix4T.cpp:28
 #15 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382094c, c=c@entry=0x7fffd3820948) at pxCore/src/pxMatrix4T.cpp:28
 #16 0x00000000004614bc in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #17 pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #18 pxObject::applyMatrix (this=0x1d3ab80, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #19 0x000000000048b9e1 in pxObject::drawInternal (this=0x1d3ab80, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #20 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc790, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #21 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #22 0x000000000048bad6 in pxObject::drawInternal (this=0x1d0ed70, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#23 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc280, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#24 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#25 0x000000000048bad6 in pxObject::drawInternal (this=0x1c620b0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#26 0x000000000048bf02 in pxObject::drawInternal (this=0x1786380, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#27 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#28 0x00000000004b11e1 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 pxscene#29 0x0000000000486df4 in pxScene2d::onUpdate (this=0x1786190, t=1519218877) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 pxscene#30 0x00000000004affb8 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 pxscene#31 0x00000000004b063a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#32 0x00007fba9acf92e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#33 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#34 0x00007fba9acf93d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#35 0x00000000004afb98 in pxMain (argc=<optimized out>, argv=0x7fffd3821458) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#36 0x00007fba9a02200a in __libc_start_main (main=0x45b150 <main(int, char**)>, argc=2, argv=0x7fffd3821458, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd3821448) at ../csu/libc-start.c:308
 pxscene#37 0x000000000045b90a in _start ()

Backtrace after (x86_64 platform):
(gdb) bt
 #0  sincosf () at ../sysdeps/x86_64/fpu/s_sincosf.S:77 <-- built-in version
 #1  0x000000000046150c in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #2  pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #3  pxObject::applyMatrix (this=0x340f610, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #4  0x000000000048ba31 in pxObject::drawInternal (this=0x340f610, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #5  0x000000000048bf52 in pxObject::drawInternal (this=0x3458940, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #6  0x000000000048bf52 in pxObject::drawInternal (this=0x33b5c30, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #7  0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #8  0x000000000048c5f7 in pxObject::createSnapshot (this=this@entry=0x34a92f0, fbo=..., separateContext=separateContext@entry=false, antiAliasing=antiAliasing@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1556
 #9  0x000000000048bdb3 in pxObject::drawInternal (this=0x34a92f0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1343
 #10 0x000000000048bf52 in pxObject::drawInternal (this=0x3484670, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #11 0x000000000048bf52 in pxObject::drawInternal (this=0x33b5ab0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #12 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #13 0x000000000048bb26 in pxObject::drawInternal (this=0x3432b50, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #14 0x000000000048bf52 in pxObject::drawInternal (this=0x33b51a0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #15 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #16 0x000000000048bb26 in pxObject::drawInternal (this=0x3396d60, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #17 0x000000000048bf52 in pxObject::drawInternal (this=0x2e444b0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #18 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #19 0x00000000004b1231 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #20 0x0000000000486e44 in pxScene2d::onUpdate (this=0x2e5f7b0, t=1519220497) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #21 0x00000000004b0008 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #22 0x00000000004b068a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#23 0x00007f830a0c72e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#24 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#25 0x00007f830a0c73d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#26 0x00000000004afbe8 in pxMain (argc=<optimized out>, argv=0x7ffe4b7e2de8) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#27 0x00007f83093f000a in __libc_start_main (main=0x45b1a0 <main(int, char**)>, argc=2, argv=0x7ffe4b7e2de8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe4b7e2dd8) at ../csu/libc-start.c:308
 pxscene#28 0x000000000045b95a in _start ()
dwrobel referenced this issue in dwrobel/pxCore Feb 21, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 21, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 21, 2018
Backtrace before (note that it causes stack-overflow):
 (gdb) bt
 #0  sincosf (x=-6.16183472, s=s@entry=0x7fffd382066c, c=c@entry=0x7fffd3820668) at pxCore/src/pxMatrix4T.cpp:28
 #1  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382069c, c=c@entry=0x7fffd3820698) at pxCore/src/pxMatrix4T.cpp:28
 #2  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206cc, c=c@entry=0x7fffd38206c8) at pxCore/src/pxMatrix4T.cpp:28
 #3  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206fc, c=c@entry=0x7fffd38206f8) at pxCore/src/pxMatrix4T.cpp:28
 #4  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382072c, c=c@entry=0x7fffd3820728) at pxCore/src/pxMatrix4T.cpp:28
 #5  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382075c, c=c@entry=0x7fffd3820758) at pxCore/src/pxMatrix4T.cpp:28
 #6  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382078c, c=c@entry=0x7fffd3820788) at pxCore/src/pxMatrix4T.cpp:28
 #7  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207bc, c=c@entry=0x7fffd38207b8) at pxCore/src/pxMatrix4T.cpp:28
 #8  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207ec, c=c@entry=0x7fffd38207e8) at pxCore/src/pxMatrix4T.cpp:28
 #9  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382081c, c=c@entry=0x7fffd3820818) at pxCore/src/pxMatrix4T.cpp:28
 #10 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382084c, c=c@entry=0x7fffd3820848) at pxCore/src/pxMatrix4T.cpp:28
 #11 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382087c, c=c@entry=0x7fffd3820878) at pxCore/src/pxMatrix4T.cpp:28
 #12 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208ac, c=c@entry=0x7fffd38208a8) at pxCore/src/pxMatrix4T.cpp:28
 #13 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208dc, c=c@entry=0x7fffd38208d8) at pxCore/src/pxMatrix4T.cpp:28
 #14 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382090c, c=c@entry=0x7fffd3820908) at pxCore/src/pxMatrix4T.cpp:28
 #15 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382094c, c=c@entry=0x7fffd3820948) at pxCore/src/pxMatrix4T.cpp:28
 #16 0x00000000004614bc in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #17 pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #18 pxObject::applyMatrix (this=0x1d3ab80, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #19 0x000000000048b9e1 in pxObject::drawInternal (this=0x1d3ab80, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #20 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc790, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #21 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #22 0x000000000048bad6 in pxObject::drawInternal (this=0x1d0ed70, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#23 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc280, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#24 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#25 0x000000000048bad6 in pxObject::drawInternal (this=0x1c620b0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#26 0x000000000048bf02 in pxObject::drawInternal (this=0x1786380, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#27 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#28 0x00000000004b11e1 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 pxscene#29 0x0000000000486df4 in pxScene2d::onUpdate (this=0x1786190, t=1519218877) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 pxscene#30 0x00000000004affb8 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 pxscene#31 0x00000000004b063a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#32 0x00007fba9acf92e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#33 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#34 0x00007fba9acf93d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#35 0x00000000004afb98 in pxMain (argc=<optimized out>, argv=0x7fffd3821458) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#36 0x00007fba9a02200a in __libc_start_main (main=0x45b150 <main(int, char**)>, argc=2, argv=0x7fffd3821458, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd3821448) at ../csu/libc-start.c:308
 pxscene#37 0x000000000045b90a in _start ()

Backtrace after (x86_64 platform):
(gdb) bt
 #0  sincosf () at ../sysdeps/x86_64/fpu/s_sincosf.S:77 <-- built-in version
 #1  0x000000000046150c in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #2  pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #3  pxObject::applyMatrix (this=0x340f610, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #4  0x000000000048ba31 in pxObject::drawInternal (this=0x340f610, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #5  0x000000000048bf52 in pxObject::drawInternal (this=0x3458940, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #6  0x000000000048bf52 in pxObject::drawInternal (this=0x33b5c30, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #7  0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #8  0x000000000048c5f7 in pxObject::createSnapshot (this=this@entry=0x34a92f0, fbo=..., separateContext=separateContext@entry=false, antiAliasing=antiAliasing@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1556
 #9  0x000000000048bdb3 in pxObject::drawInternal (this=0x34a92f0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1343
 #10 0x000000000048bf52 in pxObject::drawInternal (this=0x3484670, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #11 0x000000000048bf52 in pxObject::drawInternal (this=0x33b5ab0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #12 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #13 0x000000000048bb26 in pxObject::drawInternal (this=0x3432b50, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #14 0x000000000048bf52 in pxObject::drawInternal (this=0x33b51a0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #15 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #16 0x000000000048bb26 in pxObject::drawInternal (this=0x3396d60, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #17 0x000000000048bf52 in pxObject::drawInternal (this=0x2e444b0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #18 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #19 0x00000000004b1231 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #20 0x0000000000486e44 in pxScene2d::onUpdate (this=0x2e5f7b0, t=1519220497) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #21 0x00000000004b0008 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #22 0x00000000004b068a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#23 0x00007f830a0c72e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#24 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#25 0x00007f830a0c73d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#26 0x00000000004afbe8 in pxMain (argc=<optimized out>, argv=0x7ffe4b7e2de8) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#27 0x00007f83093f000a in __libc_start_main (main=0x45b1a0 <main(int, char**)>, argc=2, argv=0x7ffe4b7e2de8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe4b7e2dd8) at ../csu/libc-start.c:308
 pxscene#28 0x000000000045b95a in _start ()
dwrobel referenced this issue in dwrobel/pxCore Feb 22, 2018
Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    pxscene#23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    pxscene#24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    pxscene#25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    pxscene#26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    pxscene#27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    pxscene#28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    pxscene#29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    pxscene#30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    pxscene#31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    pxscene#32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    pxscene#33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    pxscene#34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    pxscene#35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    pxscene#36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    pxscene#37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    pxscene#23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    pxscene#24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
dwrobel referenced this issue in dwrobel/pxCore Feb 22, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 22, 2018
Backtrace before (note that it causes stack-overflow):
 (gdb) bt
 #0  sincosf (x=-6.16183472, s=s@entry=0x7fffd382066c, c=c@entry=0x7fffd3820668) at pxCore/src/pxMatrix4T.cpp:28
 #1  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382069c, c=c@entry=0x7fffd3820698) at pxCore/src/pxMatrix4T.cpp:28
 #2  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206cc, c=c@entry=0x7fffd38206c8) at pxCore/src/pxMatrix4T.cpp:28
 #3  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206fc, c=c@entry=0x7fffd38206f8) at pxCore/src/pxMatrix4T.cpp:28
 #4  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382072c, c=c@entry=0x7fffd3820728) at pxCore/src/pxMatrix4T.cpp:28
 #5  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382075c, c=c@entry=0x7fffd3820758) at pxCore/src/pxMatrix4T.cpp:28
 #6  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382078c, c=c@entry=0x7fffd3820788) at pxCore/src/pxMatrix4T.cpp:28
 #7  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207bc, c=c@entry=0x7fffd38207b8) at pxCore/src/pxMatrix4T.cpp:28
 #8  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207ec, c=c@entry=0x7fffd38207e8) at pxCore/src/pxMatrix4T.cpp:28
 #9  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382081c, c=c@entry=0x7fffd3820818) at pxCore/src/pxMatrix4T.cpp:28
 #10 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382084c, c=c@entry=0x7fffd3820848) at pxCore/src/pxMatrix4T.cpp:28
 #11 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382087c, c=c@entry=0x7fffd3820878) at pxCore/src/pxMatrix4T.cpp:28
 #12 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208ac, c=c@entry=0x7fffd38208a8) at pxCore/src/pxMatrix4T.cpp:28
 #13 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208dc, c=c@entry=0x7fffd38208d8) at pxCore/src/pxMatrix4T.cpp:28
 #14 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382090c, c=c@entry=0x7fffd3820908) at pxCore/src/pxMatrix4T.cpp:28
 #15 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382094c, c=c@entry=0x7fffd3820948) at pxCore/src/pxMatrix4T.cpp:28
 #16 0x00000000004614bc in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #17 pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #18 pxObject::applyMatrix (this=0x1d3ab80, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #19 0x000000000048b9e1 in pxObject::drawInternal (this=0x1d3ab80, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #20 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc790, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #21 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #22 0x000000000048bad6 in pxObject::drawInternal (this=0x1d0ed70, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#23 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc280, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#24 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#25 0x000000000048bad6 in pxObject::drawInternal (this=0x1c620b0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#26 0x000000000048bf02 in pxObject::drawInternal (this=0x1786380, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#27 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#28 0x00000000004b11e1 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 pxscene#29 0x0000000000486df4 in pxScene2d::onUpdate (this=0x1786190, t=1519218877) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 pxscene#30 0x00000000004affb8 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 pxscene#31 0x00000000004b063a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#32 0x00007fba9acf92e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#33 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#34 0x00007fba9acf93d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#35 0x00000000004afb98 in pxMain (argc=<optimized out>, argv=0x7fffd3821458) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#36 0x00007fba9a02200a in __libc_start_main (main=0x45b150 <main(int, char**)>, argc=2, argv=0x7fffd3821458, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd3821448) at ../csu/libc-start.c:308
 pxscene#37 0x000000000045b90a in _start ()

Backtrace after (x86_64 platform):
(gdb) bt
 #0  sincosf () at ../sysdeps/x86_64/fpu/s_sincosf.S:77 <-- built-in version
 #1  0x000000000046150c in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #2  pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #3  pxObject::applyMatrix (this=0x340f610, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #4  0x000000000048ba31 in pxObject::drawInternal (this=0x340f610, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #5  0x000000000048bf52 in pxObject::drawInternal (this=0x3458940, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #6  0x000000000048bf52 in pxObject::drawInternal (this=0x33b5c30, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #7  0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #8  0x000000000048c5f7 in pxObject::createSnapshot (this=this@entry=0x34a92f0, fbo=..., separateContext=separateContext@entry=false, antiAliasing=antiAliasing@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1556
 #9  0x000000000048bdb3 in pxObject::drawInternal (this=0x34a92f0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1343
 #10 0x000000000048bf52 in pxObject::drawInternal (this=0x3484670, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #11 0x000000000048bf52 in pxObject::drawInternal (this=0x33b5ab0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #12 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #13 0x000000000048bb26 in pxObject::drawInternal (this=0x3432b50, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #14 0x000000000048bf52 in pxObject::drawInternal (this=0x33b51a0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #15 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #16 0x000000000048bb26 in pxObject::drawInternal (this=0x3396d60, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #17 0x000000000048bf52 in pxObject::drawInternal (this=0x2e444b0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #18 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #19 0x00000000004b1231 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #20 0x0000000000486e44 in pxScene2d::onUpdate (this=0x2e5f7b0, t=1519220497) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #21 0x00000000004b0008 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #22 0x00000000004b068a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#23 0x00007f830a0c72e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#24 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#25 0x00007f830a0c73d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#26 0x00000000004afbe8 in pxMain (argc=<optimized out>, argv=0x7ffe4b7e2de8) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#27 0x00007f83093f000a in __libc_start_main (main=0x45b1a0 <main(int, char**)>, argc=2, argv=0x7ffe4b7e2de8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe4b7e2dd8) at ../csu/libc-start.c:308
 pxscene#28 0x000000000045b95a in _start ()
mfiess pushed a commit that referenced this issue Feb 27, 2018
)

Fixes the following data race:

WARNING: ThreadSanitizer: data race (pid=10382)
  Write of size 1 at 0x7b44001817aa by thread T31 (mutexes: write M68656):
    #0 pxWayland::connectToRemoteObject() pxCore/examples/pxScene2d/src/pxWayland.cpp:713 (pxscene+0x00000058ea65)
    #1 pxWayland::findRemoteThread(void*) pxCore/examples/pxScene2d/src/pxWayland.cpp:643 (pxscene+0x00000058e625)
    #2 <null> <null> (libtsan.so.0+0x0000000257eb)

  Previous write of size 1 at 0x7b44001817aa by main thread (mutexes: write M357):
    #0 pxWayland::terminateClient() pxCore/examples/pxScene2d/src/pxWayland.cpp:579 (pxscene+0x00000058e2c4)
    #1 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:94 (pxscene+0x00000058bd42)
    #2 pxWayland::~pxWayland() pxCore/examples/pxScene2d/src/pxWayland.cpp:96 (pxscene+0x00000058bdef)
    #3 pxWayland::Release() pxCore/examples/pxScene2d/src/pxWayland.h:66 (pxscene+0x00000058f8d7)
    #4 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #5 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #6 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #7 pxWaylandContainer::setView(pxWayland*) pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:295 (pxscene+0x000000592128)
    #8 pxWaylandContainer::dispose() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:68 (pxscene+0x000000590605)
    #9 pxObject::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:529 (pxscene+0x00000053beb1)
    #10 pxScene2d::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:1832 (pxscene+0x000000541d21)
    #11 pxScene2d::dispose_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055ff69)
    #12 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #13 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #14 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #15 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055befe)
    #16 pxScriptView::~pxScriptView() <null> (pxscene+0x00000055c015)
    #17 pxScriptView::Release() <null> (pxscene+0x00000055c0ea)
    #18 rtRef<pxIView>::asn(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:74 (pxscene+0x000000567ed3)
    #19 rtRef<pxIView>::operator=(pxIView const*) pxCore/examples/pxScene2d/src/../../../src/rtRef.h:58 (pxscene+0x000000564221)
    #20 pxViewContainer::setView(pxIView*) <null> (pxscene+0x000000559f65)
    #21 pxSceneContainer::setScriptView(pxScriptView*) pxCore/examples/pxScene2d/src/pxScene2d.cpp:3374 (pxscene+0x00000054b2ff)
    #22 pxSceneContainer::dispose() pxCore/examples/pxScene2d/src/pxScene2d.cpp:3405 (pxscene+0x00000054b4d8)
    #23 pxObject::releaseResources() pxCore/examples/pxScene2d/src/pxScene2d.h:700 (pxscene+0x000000557e12)
    #24 pxObject::releaseResources_thunk(int, rtValue const*, rtValue&) pxCore/examples/pxScene2d/src/pxScene2d.h:207 (pxscene+0x000000552dfb)
    #25 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #26 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #27 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #28 WeakCallback pxCore/src/rtScriptNode/rtWrapperUtils.cpp:91 (pxscene+0x0000005db766)
    #29 v8::internal::GlobalHandles::PendingPhantomCallback::Invoke(v8::internal::Isolate*) ../deps/v8/src/global-handles.cc:1072 (libnode.so.48+0x00000083af5e)
    #30 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:261 (pxscene+0x0000005d0b74)
    #31 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #32 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #33 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #34 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #35 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #36 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #37 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #38 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #39 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Location is heap block of size 320 at 0x7b4400181780 allocated by main thread:
    #0 operator new(unsigned long) <null> (libtsan.so.0+0x00000006f766)
    #1 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fa9)
    #2 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #3 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #4 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #5 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #6 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #7 uv__queue_done <null> (pxscene+0x00000067b1da)
    #8 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #9 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #10 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #11 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #12 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #13 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #14 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #15 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M68656 (0x7b4400181898) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 rtMutexNative::rtMutexNative() pxCore/src/unix/rtMutexNative.cpp:6 (pxscene+0x000000599c10)
    #2 rtMutex::rtMutex() pxCore/src/unix/../rtMutex.h:30 (pxscene+0x0000004e6fea)
    #3 pxWayland::pxWayland(bool) pxCore/examples/pxScene2d/src/pxWayland.cpp:73 (pxscene+0x00000058baed)
    #4 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2142 (pxscene+0x000000543fb9)
    #5 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #6 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #9 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #10 uv__queue_done <null> (pxscene+0x00000067b1da)
    #11 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #12 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #13 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #14 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #15 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #16 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #17 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #18 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Mutex M357 (0x7b1400000550) created at:
    #0 pthread_mutex_init <null> (libtsan.so.0+0x00000002971e)
    #1 v8::internal::ThreadManager::ThreadManager() ../deps/v8/src/v8threads.cc:245 (libnode.so.48+0x000000b3fa1e)
    #2 rtScriptNode::init() pxCore/src/rtScriptNode/rtScriptNode.cpp:1025 (pxscene+0x0000005c9a49)
    #3 rtScript::init() pxCore/src/rtScript.cpp:203 (pxscene+0x0000005bc118)
    #4 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:526 (pxscene+0x000000598491)
    #5 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

  Thread T31 (tid=11324, running) created by main thread at:
    #0 pthread_create <null> (libtsan.so.0+0x000000028e03)
    #1 pxWayland::startRemoteObjectDetection() pxCore/examples/pxScene2d/src/pxWayland.cpp:628 (pxscene+0x00000058e597)
    #2 pxWayland::createDisplay(rtString) pxCore/examples/pxScene2d/src/pxWayland.cpp:197 (pxscene+0x00000058c514)
    #3 pxWayland::onInit() pxCore/examples/pxScene2d/src/pxWayland.cpp:107 (pxscene+0x00000058bf09)
    #4 pxWaylandContainer::onInit() pxCore/examples/pxScene2d/src/pxWaylandContainer.cpp:376 (pxscene+0x000000592763)
    #5 rtObject::init() pxCore/src/rtObject.cpp:321 (pxscene+0x00000060c4cf)
    #6 rtObject::init_thunk(int, rtValue const*, rtValue&) pxCore/src/rtObject.h:292 (pxscene+0x00000060ed31)
    #7 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #8 rtObjectBase::Send(char const*, int, rtValue const*) pxCore/src/rtObject.cpp:444 (pxscene+0x00000060cc80)
    #9 rtObjectBase::send(char const*) pxCore/src/rtObject.cpp:460 (pxscene+0x00000060cdf0)
    #10 pxScene2d::createWayland(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:2145 (pxscene+0x00000054402f)
    #11 pxScene2d::create(rtObjectRef, rtObjectRef&) pxCore/examples/pxScene2d/src/pxScene2d.cpp:1919 (pxscene+0x000000542614)
    #12 pxScene2d::create_thunk(int, rtValue const*, rtValue&) <null> (pxscene+0x00000055d9d8)
    #13 rtObjectFunction::Send(int, rtValue const*, rtValue*) pxCore/src/rtObject.cpp:581 (pxscene+0x00000060e36e)
    #14 rtScriptNodeUtils::rtFunctionWrapper::call(v8::FunctionCallbackInfo<v8::Value> const&) pxCore/src/rtScriptNode/rtFunctionWrapper.cpp:226 (pxscene+0x0000005d0665)
    #15 v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) ../deps/v8/src/api-arguments.cc:16 (libnode.so.48+0x0000005844f2)
    #16 uv__queue_done <null> (pxscene+0x00000067b1da)
    #17 rtScript::pump() pxCore/src/rtScript.cpp:221 (pxscene+0x0000005bc24c)
    #18 sceneWindow::onAnimationTimer() pxCore/examples/pxScene2d/src/pxScene.cpp:373 (pxscene+0x000000599b87)
    #19 pxWindowNative::onAnimationTimerInternal() pxCore/src/wayland_egl/pxWindowNative.cpp:488 (pxscene+0x0000005a199a)
    #20 pxWindowNative::animateAndRender() pxCore/src/wayland_egl/pxWindowNative.cpp:853 (pxscene+0x0000005a2c70)
    #21 pxWindowNative::runEventLoop() pxCore/src/wayland_egl/pxWindowNative.cpp:595 (pxscene+0x0000005a1f66)
    #22 pxEventLoop::run() pxCore/src/wayland_egl/pxEventLoopNative.cpp:19 (pxscene+0x0000005a613d)
    #23 pxMain(int, char**) pxCore/examples/pxScene2d/src/pxScene.cpp:623 (pxscene+0x00000059860c)
    #24 main pxCore/src/wayland_egl/pxEventLoopNative.cpp:34 (pxscene+0x0000005a61cb)

SUMMARY: ThreadSanitizer: data race pxCore/examples/pxScene2d/src/pxWayland.cpp:713 in pxWayland::connectToRemoteObject()
mfiess pushed a commit that referenced this issue Feb 27, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 27, 2018
Fixex attempt to allocate 0xffffffff833db0fe bytes of data:

==18628==WARNING: AddressSanitizer failed to allocate 0xffffffff833db0fe bytes
==18628==AddressSanitizer CHECK failed: ../../../../libsanitizer/sanitizer_common/sanitizer_allocator.cc:218 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f939d46a902  (/lib64/libasan.so.4+0xe9902)
    #1 0x7f939d489295 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/lib64/libasan.so.4+0x108295)
    #2 0x7f939d470042  (/lib64/libasan.so.4+0xef042)
    #3 0x7f939d3a8b46  (/lib64/libasan.so.4+0x27b46)
    #4 0x7f939d45f81a in malloc (/lib64/libasan.so.4+0xde81a)
    #5 0x81fc71 in pxLoadJPGImageTurbo(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:711
    #6 0x81dea4 in pxLoadImage(char const*, unsigned long, pxOffscreen&) pxCore/src/pxUtil.cpp:49
    #7 0x63a942 in pxUtilTest::pxLoadImage3ArgsLessLengthFailureTest() pxCore/tests/pxScene2d/test_pxUtil.cpp:142
    #8 0x638975 in pxUtilTest_pxutilsTest_Test::TestBody() pxCore/tests/pxScene2d/test_pxUtil.cpp:327
    #9 0x7ad278 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7ad278)
    #10 0x7a0938 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2438
    #11 0x75d4cd in testing::Test::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2474
    #12 0x75e7b9 in testing::TestInfo::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2656
    #13 0x75f332 in testing::TestCase::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2774
    #14 0x76fed0 in testing::internal::UnitTestImpl::RunAllTests() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4649
    #15 0x7afcb7 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:2402
    #16 0x7a2a97 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (pxCore/tests/pxScene2d/pxscene2dtests+0x7a2a97)
    #17 0x76d0d9 in testing::UnitTest::Run() pxCore/tests/pxScene2d/../../examples/pxScene2d/external/gtest/googletest/src/gtest.cc:4257
    #18 0x5299db in RUN_ALL_TESTS() (pxCore/tests/pxScene2d/pxscene2dtests+0x5299db)
    #19 0x5295c7 in main pxCore/tests/pxScene2d/pxscene2dtestsmain.cpp:101
    #20 0x7f9397692009 in __libc_start_main (/lib64/libc.so.6+0x21009)
    #21 0x5293c9 in _start (pxCore/tests/pxScene2d/pxscene2dtests+0x5293c9)
dwrobel referenced this issue in dwrobel/pxCore Feb 27, 2018
Backtrace before (note that it causes stack-overflow):
 (gdb) bt
 #0  sincosf (x=-6.16183472, s=s@entry=0x7fffd382066c, c=c@entry=0x7fffd3820668) at pxCore/src/pxMatrix4T.cpp:28
 #1  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382069c, c=c@entry=0x7fffd3820698) at pxCore/src/pxMatrix4T.cpp:28
 #2  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206cc, c=c@entry=0x7fffd38206c8) at pxCore/src/pxMatrix4T.cpp:28
 #3  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206fc, c=c@entry=0x7fffd38206f8) at pxCore/src/pxMatrix4T.cpp:28
 #4  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382072c, c=c@entry=0x7fffd3820728) at pxCore/src/pxMatrix4T.cpp:28
 #5  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382075c, c=c@entry=0x7fffd3820758) at pxCore/src/pxMatrix4T.cpp:28
 #6  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382078c, c=c@entry=0x7fffd3820788) at pxCore/src/pxMatrix4T.cpp:28
 #7  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207bc, c=c@entry=0x7fffd38207b8) at pxCore/src/pxMatrix4T.cpp:28
 #8  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207ec, c=c@entry=0x7fffd38207e8) at pxCore/src/pxMatrix4T.cpp:28
 #9  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382081c, c=c@entry=0x7fffd3820818) at pxCore/src/pxMatrix4T.cpp:28
 #10 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382084c, c=c@entry=0x7fffd3820848) at pxCore/src/pxMatrix4T.cpp:28
 #11 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382087c, c=c@entry=0x7fffd3820878) at pxCore/src/pxMatrix4T.cpp:28
 #12 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208ac, c=c@entry=0x7fffd38208a8) at pxCore/src/pxMatrix4T.cpp:28
 #13 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208dc, c=c@entry=0x7fffd38208d8) at pxCore/src/pxMatrix4T.cpp:28
 #14 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382090c, c=c@entry=0x7fffd3820908) at pxCore/src/pxMatrix4T.cpp:28
 #15 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382094c, c=c@entry=0x7fffd3820948) at pxCore/src/pxMatrix4T.cpp:28
 #16 0x00000000004614bc in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #17 pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #18 pxObject::applyMatrix (this=0x1d3ab80, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #19 0x000000000048b9e1 in pxObject::drawInternal (this=0x1d3ab80, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #20 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc790, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #21 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #22 0x000000000048bad6 in pxObject::drawInternal (this=0x1d0ed70, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#23 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc280, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#24 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#25 0x000000000048bad6 in pxObject::drawInternal (this=0x1c620b0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 pxscene#26 0x000000000048bf02 in pxObject::drawInternal (this=0x1786380, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 pxscene#27 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 pxscene#28 0x00000000004b11e1 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 pxscene#29 0x0000000000486df4 in pxScene2d::onUpdate (this=0x1786190, t=1519218877) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 pxscene#30 0x00000000004affb8 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 pxscene#31 0x00000000004b063a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#32 0x00007fba9acf92e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#33 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#34 0x00007fba9acf93d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#35 0x00000000004afb98 in pxMain (argc=<optimized out>, argv=0x7fffd3821458) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#36 0x00007fba9a02200a in __libc_start_main (main=0x45b150 <main(int, char**)>, argc=2, argv=0x7fffd3821458, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd3821448) at ../csu/libc-start.c:308
 pxscene#37 0x000000000045b90a in _start ()

Backtrace after (x86_64 platform):
(gdb) bt
 #0  sincosf () at ../sysdeps/x86_64/fpu/s_sincosf.S:77 <-- built-in version
 #1  0x000000000046150c in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #2  pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #3  pxObject::applyMatrix (this=0x340f610, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #4  0x000000000048ba31 in pxObject::drawInternal (this=0x340f610, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #5  0x000000000048bf52 in pxObject::drawInternal (this=0x3458940, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #6  0x000000000048bf52 in pxObject::drawInternal (this=0x33b5c30, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #7  0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #8  0x000000000048c5f7 in pxObject::createSnapshot (this=this@entry=0x34a92f0, fbo=..., separateContext=separateContext@entry=false, antiAliasing=antiAliasing@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1556
 #9  0x000000000048bdb3 in pxObject::drawInternal (this=0x34a92f0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1343
 #10 0x000000000048bf52 in pxObject::drawInternal (this=0x3484670, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #11 0x000000000048bf52 in pxObject::drawInternal (this=0x33b5ab0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #12 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #13 0x000000000048bb26 in pxObject::drawInternal (this=0x3432b50, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #14 0x000000000048bf52 in pxObject::drawInternal (this=0x33b51a0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #15 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #16 0x000000000048bb26 in pxObject::drawInternal (this=0x3396d60, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #17 0x000000000048bf52 in pxObject::drawInternal (this=0x2e444b0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #18 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #19 0x00000000004b1231 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #20 0x0000000000486e44 in pxScene2d::onUpdate (this=0x2e5f7b0, t=1519220497) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #21 0x00000000004b0008 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #22 0x00000000004b068a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 pxscene#23 0x00007f830a0c72e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 pxscene#24 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 pxscene#25 0x00007f830a0c73d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 pxscene#26 0x00000000004afbe8 in pxMain (argc=<optimized out>, argv=0x7ffe4b7e2de8) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 pxscene#27 0x00007f83093f000a in __libc_start_main (main=0x45b1a0 <main(int, char**)>, argc=2, argv=0x7ffe4b7e2de8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe4b7e2dd8) at ../csu/libc-start.c:308
 pxscene#28 0x000000000045b95a in _start ()
mfiess pushed a commit that referenced this issue Feb 27, 2018
Backtrace before (note that it causes stack-overflow):
 (gdb) bt
 #0  sincosf (x=-6.16183472, s=s@entry=0x7fffd382066c, c=c@entry=0x7fffd3820668) at pxCore/src/pxMatrix4T.cpp:28
 #1  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382069c, c=c@entry=0x7fffd3820698) at pxCore/src/pxMatrix4T.cpp:28
 #2  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206cc, c=c@entry=0x7fffd38206c8) at pxCore/src/pxMatrix4T.cpp:28
 #3  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38206fc, c=c@entry=0x7fffd38206f8) at pxCore/src/pxMatrix4T.cpp:28
 #4  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382072c, c=c@entry=0x7fffd3820728) at pxCore/src/pxMatrix4T.cpp:28
 #5  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382075c, c=c@entry=0x7fffd3820758) at pxCore/src/pxMatrix4T.cpp:28
 #6  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382078c, c=c@entry=0x7fffd3820788) at pxCore/src/pxMatrix4T.cpp:28
 #7  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207bc, c=c@entry=0x7fffd38207b8) at pxCore/src/pxMatrix4T.cpp:28
 #8  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38207ec, c=c@entry=0x7fffd38207e8) at pxCore/src/pxMatrix4T.cpp:28
 #9  0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382081c, c=c@entry=0x7fffd3820818) at pxCore/src/pxMatrix4T.cpp:28
 #10 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382084c, c=c@entry=0x7fffd3820848) at pxCore/src/pxMatrix4T.cpp:28
 #11 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382087c, c=c@entry=0x7fffd3820878) at pxCore/src/pxMatrix4T.cpp:28
 #12 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208ac, c=c@entry=0x7fffd38208a8) at pxCore/src/pxMatrix4T.cpp:28
 #13 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd38208dc, c=c@entry=0x7fffd38208d8) at pxCore/src/pxMatrix4T.cpp:28
 #14 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382090c, c=c@entry=0x7fffd3820908) at pxCore/src/pxMatrix4T.cpp:28
 #15 0x00000000004d0a5b in sincosf (x=<optimized out>, s=s@entry=0x7fffd382094c, c=c@entry=0x7fffd3820948) at pxCore/src/pxMatrix4T.cpp:28
 #16 0x00000000004614bc in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #17 pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7fffd3820a30) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #18 pxObject::applyMatrix (this=0x1d3ab80, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #19 0x000000000048b9e1 in pxObject::drawInternal (this=0x1d3ab80, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #20 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc790, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #21 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #22 0x000000000048bad6 in pxObject::drawInternal (this=0x1d0ed70, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #23 0x000000000048bf02 in pxObject::drawInternal (this=0x1cdc280, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #24 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #25 0x000000000048bad6 in pxObject::drawInternal (this=0x1c620b0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #26 0x000000000048bf02 in pxObject::drawInternal (this=0x1786380, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #27 0x000000000048c9d8 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #28 0x00000000004b11e1 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #29 0x0000000000486df4 in pxScene2d::onUpdate (this=0x1786190, t=1519218877) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #30 0x00000000004affb8 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #31 0x00000000004b063a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 #32 0x00007fba9acf92e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 #33 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 #34 0x00007fba9acf93d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 #35 0x00000000004afb98 in pxMain (argc=<optimized out>, argv=0x7fffd3821458) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 #36 0x00007fba9a02200a in __libc_start_main (main=0x45b150 <main(int, char**)>, argc=2, argv=0x7fffd3821458, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd3821448) at ../csu/libc-start.c:308
 #37 0x000000000045b90a in _start ()

Backtrace after (x86_64 platform):
(gdb) bt
 #0  sincosf () at ../sysdeps/x86_64/fpu/s_sincosf.S:77 <-- built-in version
 #1  0x000000000046150c in pxMatrix4T<float>::rotateInRadians (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../ src/pxMatrix4T.h:209
 #2  pxMatrix4T<float>::rotateInDegrees (z=1, y=0, x=0, angle=<optimized out>, this=0x7ffe4b7e1ff0) at pxCore/examples/pxScene2d/src/../../../src/pxMatrix4T.h:180
 #3  pxObject::applyMatrix (this=0x340f610, m=...) at pxCore/examples/pxScene2d/src/pxScene2d.h:499
 #4  0x000000000048ba31 in pxObject::drawInternal (this=0x340f610, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1253
 #5  0x000000000048bf52 in pxObject::drawInternal (this=0x3458940, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #6  0x000000000048bf52 in pxObject::drawInternal (this=0x33b5c30, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #7  0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #8  0x000000000048c5f7 in pxObject::createSnapshot (this=this@entry=0x34a92f0, fbo=..., separateContext=separateContext@entry=false, antiAliasing=antiAliasing@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1556
 #9  0x000000000048bdb3 in pxObject::drawInternal (this=0x34a92f0, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1343
 #10 0x000000000048bf52 in pxObject::drawInternal (this=0x3484670, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #11 0x000000000048bf52 in pxObject::drawInternal (this=0x33b5ab0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #12 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #13 0x000000000048bb26 in pxObject::drawInternal (this=0x3432b50, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #14 0x000000000048bf52 in pxObject::drawInternal (this=0x33b51a0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #15 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #16 0x000000000048bb26 in pxObject::drawInternal (this=0x3396d60, maskPass=maskPass@entry=false) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1362
 #17 0x000000000048bf52 in pxObject::drawInternal (this=0x2e444b0, maskPass=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:1374
 #18 0x000000000048ca28 in non-virtual thunk to pxScene2d::onDraw() () at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2225
 #19 0x00000000004b1231 in pxWindowNative::drawFrame (this=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:823
 #20 0x0000000000486e44 in pxScene2d::onUpdate (this=0x2e5f7b0, t=1519220497) at pxCore/examples/pxScene2d/src/pxScene2d.cpp:2289
 #21 0x00000000004b0008 in sceneWindow::onAnimationTimer (this=<optimized out>) at pxCore/examples/pxScene2d/src/pxScene.cpp:370
 #22 0x00000000004b068a in pxWindowNative::onGlutTimer (v=<optimized out>) at pxCore/src/glut/pxWindowNative.cpp:310
 #23 0x00007f830a0c72e3 in fghCheckTimers () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:236
 #24 glutMainLoopEvent () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:452
 #25 0x00007f830a0c73d4 in glutMainLoop () at /usr/src/debug/freeglut-3.0.0-6.fc27.x86_64/src/fg_main.c:489
 #26 0x00000000004afbe8 in pxMain (argc=<optimized out>, argv=0x7ffe4b7e2de8) at pxCore/examples/pxScene2d/src/pxScene.cpp:623
 #27 0x00007f83093f000a in __libc_start_main (main=0x45b1a0 <main(int, char**)>, argc=2, argv=0x7ffe4b7e2de8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe4b7e2dd8) at ../csu/libc-start.c:308
 #28 0x000000000045b95a in _start ()
mfiess added a commit that referenced this issue Oct 15, 2019
* webgl support (#1859)

* Added initial webgl support

* added a new api for shared contexts and references (#1742)

*  added a new api for shared contexts and references (#1744)

* added a new api for shared contexts and references

* added a new api for shared contexts and references update

* shared context support for egl (#1750)

* initial commit

* updates

* updates

* updates

* thread safety support

* threading updates

* update

* removing test for removed api

* fix for mips contexts (#1756)

* updates to the new shared context api

* Added view events for the webgl view

* Enhanced triangle sample to log out some view events

* Added a todo comment

* Fixed crash when creating a Function object

* Added support for setTimeout to setup gl context

* depth support for egl

* setImmediate wrapper to setup drawing context

* Fixed a bug in clearImmediate wrapper

* A fix to make webgl scene nav more stable

* Added a variation of the triangle webgl sample

* Applied a patch to RunInThisContext

* adding the process object to sandbox

* Added a per sandbox spark module system

* exposing beginDrawing/endDrawing to global space

* Fixed crash in https ... lightning content reloads

* Clear color in new gl context

* Clearing initial framebuffer for webgl context

* fix a typo in method9ArgAndNoReturn macro

Signed-off-by: Gurdal Oruklu <gurdaloruklu@gmail.com>

* initial commit for WebGL

* fix libnode6.9 macOS compiler flags

* modified triangle2.js to use Spark's own WebGL

* merge update

* merge updates

* build fixes (#1862)

* build fixes

* build fixes

* adding edge builds (#1875)

* node updates and patches

* node updates

* updates for edge builds

* fix for edge build auto updates (#1876)

* fix onClose, fix setImmediate (#1906)

* add more modules to sandbox (#1885)

* run init.js as starting script

* run init.js as starting script

* Update test_rtnode.cpp

* Update test_rtnode.cpp

* Management of HTTP, HTTPS, WebSockets lifetimes (#1912)

* Management of HTTP, HTTPS, WebSockets lifetimes

* fix typo (https vs http, clearImmediate vs clearTimeout), better logging

* ability to get native texture id for pxTextureOffscreen (#1892) (#1921)

*  adding ability to create and expose textures of text and images objects (#1929)

* adding ability to create and expose textures of text and images

* updates

* texture creation helper api (#1931)

* rendering updates for text and images (#1933)

* Webgl fixes for linux (#1920)

* fixes for lightning++ on linux

* a fix for gl black screen

* fixed stuff which was reset during beginDrawing/endDrawing

* same fixes for triangle2.js

* minor changes for mac

* Update spark.sh

* node10 integration (#1934)

* adding node10 source code

* node-v10.5.3

* Revert "node-v10.5.3"

This reverts commit 96703c2.

* spark changes for node10

* spark changes for node10

* remove 8.15.1 files

* remove 8.15.1 files

* Update CommDeps.cmake

* Update spark.sh

* Update leak.supp

* windows changes

* windows changes

* compatibility with node 6.9

* Update execute_linux.sh

* compatibility with node 6.9

* fix uwebsockets build locally

* fix uwebsockets build locally

* fix crash on syntax errors

* fix crash on syntax errors

* Update leak.supp

* adding qemu patch

* reduce logging (#1945)

* fix 3-box (upgrade to canvas 2.x, infinite loop fix, gl fixes) and 4-static (gl fixes) (#1943)

* local storage for Lightning++ (#1944)

* enabling inspector (#1942)

* enabling inspector

* enabling inspector

* adding node-fetch module (#1954)

* mjs support changes (#1956)

* mjs support changes

* Update pxScene2d.cpp

* Update initGL.js

* Update initGL.js

* Update initGL.js

* adding some additional node modules (#1957)

* gl header updates (#1958)

* remove the need to build with harfbuzz (#1959)

* adding ability to flip images vertically when created (#1960)

* adding ability to flip images

* image udpates

* image updates

* image updates

* script updates (#1965)

* startup optimizations (#1967)

* added some missing webGL functions (#1969)

* changes for fixing path issues on js file under webgl (#1961)

* Update execute_linux.sh

* Update execute_linux.sh

* changes for running js file

* changes for fixing path issues on js file under webgl

* optimizations (#1972)

* optimization

* updates

* image resource flip updates (#1973)

* optimization

* updates

* image resource flip updates

* expose localStorage, a fix for non-mjs files (#1963)

* cleanup initGL (#1978)

* cleanup initGL

* Update initGL.js

* Update execute_linux.sh

* Update execute_linux.sh

* Update initGL.js

* Update initGL.js

* changes for fixing node6,node10 compatibility (#1990)

* fix for crash on exception on async execution (#1993)

* fixing issues seen with running apps remotely (#1994)

* fixing issues seen with running apps remotely

* Update initGL.js

* code cleanup (#1995)

* Effects merge (#1998)

* Adding [shaderResource] (#1908)

* Adding [shaderResource]

* Changed log level

* Adding files missed in merge/pick

* Define needed...

* Warnings...

* More warnings.

* Updates ...

* Minor fix

* Refactor / Tidy

* More tidying...

* Updates

* Naming convention for "internal" classes

* Update pxMatrix4T.h

* Missed removal of [pxShaderEffect.cpp] ... fixed

* Errant include of "pxShaderEffect.h" - now removed

* Refactor and Simplification

* Removed errant [skipTransform} ...

* Inlining...

* Refactor and Tidy up

* Tidy up unused code

* Tidy

* Revert name change

* Remove dead code

* Narrow scope via 'static' ...

* Simplification

* Refactoring...

* References !

* Adding CI test for [ shaderResource ]

* Fix warnings

* Name change to avoid conflicts

* Refactor to isolate code better

* Grrrrr... "#define ANIMATION_ROTATE_XYZ"

* Grrrr 2 ... "#define ANIMATION_ROTATE_XYZ"

* Grrr 3 - "#define ANIMATION_ROTATE_XYZ"

* Only one "#define ANIMATION_ROTATE_XYZ" ...

* Bug

* Changed dependency

* Refactor program and "use()"

* Tidy up

* Adding tests ... some refactoring

* CodeCov Test updates

* Additional tests ...

* Updates

* Additional testing changes

* Project changes + bug fix

* Updates to tests

* Missed a bug in merge.

* Comment out Archive support (for now)

* "off by one" bug in copy from rtString to rtData

* Refactoring and refinement.

* Fixes to google tests

* Unused params

* Adding flush() to API

* Save/Restore uniforms

* Permit "no uniforms" in config.

* Updated CPP unit test.  Fixed comment.

* Removed glException class throw/catch. Fix Reject

* Fix warnings

* Update per Review comments

* Missed a change.  Added Warning.

* Removed errant AddRef() calls

* Adding appropriate AddRef() calls.

* Minor edit

* ANIMATION_ROTATE_XYZ  related

* Adding include.

* Class name change

* More detail.

* Useful comment

* Avoid flicker on RT shaders

* Allow a little more time to test.

* Refactor use of shaders and FBO's

* Removed unnecessary 'flush()' api

* Remove AddRef() ... possible leak

* Fix for "FILE://" or "file://" prefixed URL's (#1984)

* Fix for "FILE://" or "file://" prefixed URL's

* Typo fix

*  Typo ... should have been Lowercase + Uppercase (#1986)

* Fix for "FILE://" or "file://" prefixed URL's

* Typo fix

* Typo ... should have been Lowercase + Uppercase

* AddRef() - Fix for compailation failed case. (#1989)

* AddRef() - Fix for compailation failed case.

* Revert .shaders version 2 -> 1

* Quieter

* Fixes for Shader Compilation failures

* Changes per PR review.

* Fix for Data/File mix permutations

* updates

* code coverage improvement for eventloop and windownative (#1870)

*  bootstrap (#1991)

* refactoring of json util functions

* bootstrap

* extension should include dot

* create app with options

* support non-gl: URLs in initGL

* optimization

* fix broken CI, revert some changes

* CI test, a fix for .spark?... urls

* create ready promise in constructor

* change useBaseURI to a proper value

* memory leak fix

* default to transparent background for sparkgl apps (#2007)

* support for spark keys and q downloads with query params (#2010)

* image flip updates and ability to read query parameters (#2012)

* image flip updates

* support to read query parameters

* fix overriding of file descriptors on spawned processes (#2014)

* Implemented fillText() and fillStyle() with color, font and pixelSize support (#2020)

refactored pxTextPaint as pxTextCanvas

Updates to pxTextCanvas, width() support

function stubs for the functions used in Lightning

updated pxTextCanvas with all props and method stubs for Lightning++. Includes the test script

moved some method definitions from pxTextCanvas.h to pxTextCanvas.cpp

moved some method definitions from pxFont.h to pxFont.cpp

fillStyle() now accepts ARGB color notation; fixed a crash when getting shadowBlur value

new property: label

Fixes

canvas size quick fix
translate property
removed shadow/hightlighting from pxTextCanvas (now dervied from pxText)
removed excessive debug info (almost)

debug info

* fix leaks (#2017)

* gl cleanup on pxWebGL destroy

* gl.delete fucntions support

* clean up memory when initGL destroys, remove hacks

* clean up global when initGL destroys

* clean bootStrapCache (leak), fix accidential global variables, delete all from sandbox

* remove old code

* change log level

* do not keep duplicate ids

* delete unique elements with std::find

* fix a leak in pxContextGL

* clean renderbuffer

* Fix for text displacement on pxTextCanvas (#2021)

* export lightning app exports via api; allow create bootstrap apps w/o options (#2025)

* video support (#2027)

* an object to support video playback (#1816)

* fix for black screen on mojave

* Video Support (#2024)

* XRE2-2164: Intergrate AAMP & depending libraries

Reason for change:  AAMP player & depending libraries required to make AAMP as the primary player of Spark
Test Procedure: Make sure that building the Spark for Linux & Mac & make contains the necessary libraries of AAMP
Risks: Low

Signed-off-by: Vinod Damodaran <vinod_damodaran@comcast.com>

* XRE2-2099: Support AAMP playback on SPARK

Reason for change: Added AAMP support in SPARK.
Test Procedure: Play js script with scene type 'video'
Risks: Medium

Signed-off-by: Vinod Damodaran <vinod_damodaran@comcast.com>

* build.sh updates

* Add URL Query Parameters to Options for Lightning Apps (#2023)

* fix for hangs (#2018)

* fix for hangs

* Update pxScene2d.cpp

* Update pxScene2d.cpp

* Update pxScene2d.cpp

* adding missing license headers (#2029)

* support file: URLs and relative to them (#2030)

* support file:, http URLs and relative to them

* fix ci scripts...

* disabling passing parameters into options (#2037)

* fix Error: Cannot find module 'ws' (#2039)

* pxTextCanvas improvements (#2038)

pxTextCanvas textAlignment and textBaseline support.
Allowed negative x and y coords in fillText() and fillRect().
Clipping is on by default to resemple HTML Canvas.
globalAlpha property

* adding a default api object for gl apps (#2040)

* disabling passing parameters into options

* adding a default api object for gl apps

* adding a default api object for gl apps

* test with remote externals (#2041)

* test with built externals

* test with built externals

* cleanups

* cleanups

* Webgl on windows (#2028)

* updated readme

* linked openssl lib

* linked openssl lib

* switch to loadArchive in initGL to enable caching (#2045)

* use externals artifacts from remote (#2049)

* new change test

* new change test

* Update .travis.yml

* Update .travis.yml

* Test

* Test

* Test

* Test

* Test

* Tt

* Tt

* Tt

* few updates

* few updates

* Update .travis.yml

* Update .travis.yml

* Update after_script.sh

* Update after_script.sh

* Update build_linux.sh

* Update tests.json

* Update .travis.yml

* Remove jpeg dylib

* Avoid printing logs on success execution

* Update execute_linux.sh

* Update tests.json

* Few updates

* fix cron failures for osx (#2052)

* Update build_osx.sh

* Update .travis.yml

* Update build_osx.sh

* Update build_osx.sh

* Update build_osx.sh

* Added support for byte range curl download(RDK-24363). (#1939) (#2055)

* Added support for byyte range curl download(RDK-24363).

* Added byte curl download support.

Added trim, toString methods in rtString.

* Added byte curl download support.

Added trim, toString methods in rtString.

* Added byte curl download support.

Added trim, toString methods in rtString.

* Added byte curl download support.

Added trim, toString methods in rtString.

* pxTextCanvas: support for CutSx, CutSy, CutEx, CutEy, fontStyle in Lightning++ (#2048)

* pxTextCanvas: support for CutSx, CutSy, CutEx, CutEy props in Lightning++

* fontStyle support for pxFont; fixed a Windows build issue

* Windows compatibility fixes

* One more Windows compatibility fix

* fontStyle coercion in pxFont

* Refactored for better backward compatibility; improved coercion detection

* Revert "pxTextCanvas: support for CutSx, CutSy, CutEx, CutEy, fontStyle in Lightning++ (#2048)" (#2057)

This reverts commit 4d93600.

* Revert "Revert "pxTextCanvas: support for CutSx, CutSy, CutEx, CutEy, fontStyle in Lightning++ (#2048)" (#2057)" (#2058)

This reverts commit 4b8cba2.

* Yet another backward compatibility fix and (again) improved coercion … (#2059)

* Yet another backward compatibility fix and (again) improved coercion detection

* fontStyle support for downloaded fonts

* Moved a comment to the appropriate place

* gzip for rtHttpRequest (#2056)

* Improve Spark fetch performance

* don't update node-fetch to 2.6.0 (same speed)

* pass sparkHttp like other webgl functions

* make compression default

* Added user configurable curl options (#2031)

* Mutex lock/unlock is not required during reaching from cache. (#2043)

* remove one line

* updates for edge builds

* more edge build updates

* updates

* updates for node

* prevent promise rejection on download processing (#2061)

* prevent promise rejection on download processing

* Update pxResource.h

* Update pxResource.h

* build updates

* build updates

* update to tests

* build script updates

* build script updates

* build script updates

* install script updates

* pick changes from revert a4a55d9 (#20)

* pick http_wrap.js from _webgl branch

* changes for switching to node6.9.0 (#1867)

* changes for switching to node6.9.0

* changes for switching to node6.9.0

* Update http_wrap.js

* Update http_wrap.js

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* pick changes from revert a4a55d9

* fix for mac unittests gif failure (#19)

* gif build error debug

* gif build error debug

* Update tests.json

* set external gif preference to off by default

* ensure a safe copy is given to javascript

* cleanup

* updates

* copy support

* Windows build fixes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants