mirror of https://github.com/PCSX2/pcsx2.git
utilities: Split thread internal callback function
__try is used in pthread_cleanup_push when CLEANUP_SET is used as the pthread cleanup model. That can't be used in functions with objects that have destructors, so move it into a separate function. Prevents compile errors on non-release Windows builds if other things in the internal callback function change.
This commit is contained in:
parent
cc52be15f3
commit
aee571e9b2
|
@ -200,6 +200,7 @@ protected:
|
||||||
void _ThreadCleanup();
|
void _ThreadCleanup();
|
||||||
|
|
||||||
static void *_internal_callback(void *func);
|
static void *_internal_callback(void *func);
|
||||||
|
static void internal_callback_helper(void *func);
|
||||||
static void _pt_callback_cleanup(void *handle);
|
static void _pt_callback_cleanup(void *handle);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -685,12 +685,21 @@ void *Threading::pxThread::_internal_callback(void *itsme)
|
||||||
{
|
{
|
||||||
if (!pxAssertDev(itsme != NULL, wxNullChar))
|
if (!pxAssertDev(itsme != NULL, wxNullChar))
|
||||||
return NULL;
|
return NULL;
|
||||||
pxThread &owner = *((pxThread *)itsme);
|
|
||||||
|
internal_callback_helper(itsme);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// __try is used in pthread_cleanup_push when CLEANUP_SEH is used as the cleanup model.
|
||||||
|
// That can't be used in a function that has objects that require unwinding (compile
|
||||||
|
// error C2712), so move it into a separate function.
|
||||||
|
void Threading::pxThread::internal_callback_helper(void *itsme)
|
||||||
|
{
|
||||||
|
pxThread &owner = *static_cast<pxThread *>(itsme);
|
||||||
|
|
||||||
pthread_cleanup_push(_pt_callback_cleanup, itsme);
|
pthread_cleanup_push(_pt_callback_cleanup, itsme);
|
||||||
owner._internal_execute();
|
owner._internal_execute();
|
||||||
pthread_cleanup_pop(true);
|
pthread_cleanup_pop(true);
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Threading::pxThread::_DoSetThreadName(const wxString &name)
|
void Threading::pxThread::_DoSetThreadName(const wxString &name)
|
||||||
|
|
Loading…
Reference in New Issue