mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge m-c to fx-team. a=merge
This commit is contained in:
commit
9c065af1ff
@ -19,12 +19,12 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="227354333a185180b85471f2cc6abfb029e44718"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
|
||||
|
@ -17,9 +17,9 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
|
@ -15,11 +15,11 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="999e945b85c578c503ad445c2285940f16aacdae">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
|
@ -19,12 +19,12 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="227354333a185180b85471f2cc6abfb029e44718"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
|
||||
|
@ -17,9 +17,9 @@
|
||||
</project>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
|
@ -4,6 +4,6 @@
|
||||
"remote": "",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "f47342e0a4e802b69ec1da8b641f24ae35016d9d",
|
||||
"revision": "cf6d955a1703c6b7a947d0f01cb60955e7e87b0d",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
@ -17,11 +17,11 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
|
@ -15,11 +15,11 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
|
@ -17,9 +17,9 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
|
@ -17,11 +17,11 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="e93780f9da8b34f370a4113abd4df9780d58e443"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d85bbae28dd9ab9679b42d8d37c84810059e097c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2249037c79fda1d2eede2d085716577d5357e796"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="dc5ca96695cab87b4c2fcd7c9f046ae3415a70a5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="71f5a35e3bc1801847413cff1f14fc3b5cd991ca"/>
|
||||
<project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -222,7 +222,11 @@ public:
|
||||
protected:
|
||||
// Main thread access only.
|
||||
// These are called on the main thread by Listener.
|
||||
NS_DECL_NSISTREAMINGPROTOCOLLISTENER
|
||||
nsresult OnMediaDataAvailable(uint8_t aIndex, const nsACString& aData,
|
||||
uint32_t aLength, uint32_t aOffset,
|
||||
nsIStreamingProtocolMetaData* aMeta);
|
||||
nsresult OnConnected(uint8_t aIndex, nsIStreamingProtocolMetaData* aMeta);
|
||||
nsresult OnDisconnected(uint8_t aIndex, nsresult aReason);
|
||||
|
||||
nsRefPtr<Listener> mListener;
|
||||
|
||||
|
@ -54,7 +54,9 @@ GestureEventListener::GestureEventListener(AsyncPanZoomController* aAsyncPanZoom
|
||||
mState(GESTURE_NONE),
|
||||
mSpanChange(0.0f),
|
||||
mPreviousSpan(0.0f),
|
||||
mLastTouchInput(MultiTouchInput::MULTITOUCH_START, 0, TimeStamp(), 0)
|
||||
mLastTouchInput(MultiTouchInput::MULTITOUCH_START, 0, TimeStamp(), 0),
|
||||
mLongTapTimeoutTask(nullptr),
|
||||
mMaxTapTimeoutTask(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@ -383,6 +385,8 @@ nsEventStatus GestureEventListener::HandleInputTouchEnd()
|
||||
nsEventStatus GestureEventListener::HandleInputTouchCancel()
|
||||
{
|
||||
SetState(GESTURE_NONE);
|
||||
CancelMaxTapTimeoutTask();
|
||||
CancelLongTapTimeoutTask();
|
||||
return nsEventStatus_eIgnore;
|
||||
}
|
||||
|
||||
|
@ -140,7 +140,21 @@ struct thread_info : public mozilla::LinkedListElement<thread_info> {
|
||||
|
||||
TLSInfoList tlsInfo;
|
||||
|
||||
pthread_mutex_t *reacquireMutex;
|
||||
/**
|
||||
* We must ensure that the recreated thread has entered pthread_cond_wait() or
|
||||
* similar functions before proceeding to recreate the next one. Otherwise, if
|
||||
* the next thread depends on the same mutex, it may be used in an incorrect
|
||||
* state. To do this, the main thread must unconditionally acquire the mutex.
|
||||
* The mutex is unconditionally released when the recreated thread enters
|
||||
* pthread_cond_wait(). The recreated thread may have locked the mutex itself
|
||||
* (if the pthread_mutex_trylock succeeded) or another thread may have already
|
||||
* held the lock. If the recreated thread did lock the mutex we must balance
|
||||
* that with another unlock on the main thread, which is signaled by
|
||||
* condMutexNeedsBalancing.
|
||||
*/
|
||||
pthread_mutex_t *condMutex;
|
||||
bool condMutexNeedsBalancing;
|
||||
|
||||
void *stk;
|
||||
|
||||
pid_t origNativeThreadID;
|
||||
@ -501,7 +515,8 @@ thread_info_new(void) {
|
||||
tinfo->recrArg = nullptr;
|
||||
tinfo->recreatedThreadID = 0;
|
||||
tinfo->recreatedNativeThreadID = 0;
|
||||
tinfo->reacquireMutex = nullptr;
|
||||
tinfo->condMutex = nullptr;
|
||||
tinfo->condMutexNeedsBalancing = false;
|
||||
tinfo->stk = MozTaggedAnonymousMmap(nullptr,
|
||||
NUWA_STACK_SIZE + getPageSize(),
|
||||
PROT_READ | PROT_WRITE,
|
||||
@ -1016,19 +1031,32 @@ __wrap_pthread_cond_wait(pthread_cond_t *cond,
|
||||
return rv;
|
||||
}
|
||||
if (recreated && mtx) {
|
||||
if (!freezePoint1 && pthread_mutex_trylock(mtx)) {
|
||||
if (!freezePoint1) {
|
||||
tinfo->condMutex = mtx;
|
||||
// The thread was frozen in pthread_cond_wait() after releasing mtx in the
|
||||
// Nuwa process. In recreating this thread, We failed to reacquire mtx
|
||||
// with the pthread_mutex_trylock() call, that is, mtx was acquired by
|
||||
// another thread. Because of this, we need the main thread's help to
|
||||
// reacquire mtx so that it will be in a valid state.
|
||||
tinfo->reacquireMutex = mtx;
|
||||
if (!pthread_mutex_trylock(mtx)) {
|
||||
tinfo->condMutexNeedsBalancing = true;
|
||||
}
|
||||
}
|
||||
RECREATE_CONTINUE();
|
||||
RECREATE_PASS_VIP();
|
||||
}
|
||||
rv = REAL(pthread_cond_wait)(cond, mtx);
|
||||
if (recreated && mtx) {
|
||||
// We have reacquired mtx. The main thread also wants to acquire mtx to
|
||||
// synchronize with us. If the main thread didn't get a chance to acquire
|
||||
// mtx let it do that now. The main thread clears condMutex after acquiring
|
||||
// it to signal us.
|
||||
if (tinfo->condMutex) {
|
||||
// We need mtx to end up locked, so tell the main thread not to unlock
|
||||
// mtx after it locks it.
|
||||
tinfo->condMutexNeedsBalancing = false;
|
||||
pthread_mutex_unlock(mtx);
|
||||
}
|
||||
// We still need to be gated as not to acquire another mutex associated with
|
||||
// another VIP thread and interfere with it.
|
||||
RECREATE_GATE_VIP();
|
||||
@ -1052,14 +1080,21 @@ __wrap_pthread_cond_timedwait(pthread_cond_t *cond,
|
||||
return rv;
|
||||
}
|
||||
if (recreated && mtx) {
|
||||
if (!freezePoint1 && pthread_mutex_trylock(mtx)) {
|
||||
tinfo->reacquireMutex = mtx;
|
||||
if (!freezePoint1) {
|
||||
tinfo->condMutex = mtx;
|
||||
if (!pthread_mutex_trylock(mtx)) {
|
||||
tinfo->condMutexNeedsBalancing = true;
|
||||
}
|
||||
}
|
||||
RECREATE_CONTINUE();
|
||||
RECREATE_PASS_VIP();
|
||||
}
|
||||
rv = REAL(pthread_cond_timedwait)(cond, mtx, abstime);
|
||||
if (recreated && mtx) {
|
||||
if (tinfo->condMutex) {
|
||||
tinfo->condMutexNeedsBalancing = false;
|
||||
pthread_mutex_unlock(mtx);
|
||||
}
|
||||
RECREATE_GATE_VIP();
|
||||
}
|
||||
THREAD_FREEZE_POINT2_VIP();
|
||||
@ -1087,14 +1122,21 @@ __wrap___pthread_cond_timedwait(pthread_cond_t *cond,
|
||||
return rv;
|
||||
}
|
||||
if (recreated && mtx) {
|
||||
if (!freezePoint1 && pthread_mutex_trylock(mtx)) {
|
||||
tinfo->reacquireMutex = mtx;
|
||||
if (!freezePoint1) {
|
||||
tinfo->condMutex = mtx;
|
||||
if (!pthread_mutex_trylock(mtx)) {
|
||||
tinfo->condMutexNeedsBalancing = true;
|
||||
}
|
||||
}
|
||||
RECREATE_CONTINUE();
|
||||
RECREATE_PASS_VIP();
|
||||
}
|
||||
rv = REAL(__pthread_cond_timedwait)(cond, mtx, abstime, clock);
|
||||
if (recreated && mtx) {
|
||||
if (tinfo->condMutex) {
|
||||
tinfo->condMutexNeedsBalancing = false;
|
||||
pthread_mutex_unlock(mtx);
|
||||
}
|
||||
RECREATE_GATE_VIP();
|
||||
}
|
||||
THREAD_FREEZE_POINT2_VIP();
|
||||
@ -1403,8 +1445,17 @@ RecreateThreads() {
|
||||
RECREATE_BEFORE(tinfo);
|
||||
thread_recreate(tinfo);
|
||||
RECREATE_WAIT();
|
||||
if (tinfo->reacquireMutex) {
|
||||
REAL(pthread_mutex_lock)(tinfo->reacquireMutex);
|
||||
if (tinfo->condMutex) {
|
||||
// Synchronize with the recreated thread in pthread_cond_wait().
|
||||
REAL(pthread_mutex_lock)(tinfo->condMutex);
|
||||
// Tell the other thread that we have successfully locked the mutex.
|
||||
// NB: condMutex can only be touched while it is held, so we must clear
|
||||
// it here and store the mutex locally.
|
||||
pthread_mutex_t *mtx = tinfo->condMutex;
|
||||
tinfo->condMutex = nullptr;
|
||||
if (tinfo->condMutexNeedsBalancing) {
|
||||
pthread_mutex_unlock(mtx);
|
||||
}
|
||||
}
|
||||
} else if(!(tinfo->flags & TINFO_FLAG_NUWA_SKIP)) {
|
||||
// An unmarked thread is found other than the main thread.
|
||||
|
Loading…
Reference in New Issue
Block a user