Kaydet (Commit) f2d66023 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Using the m_FeedbackFDs is now apparently necessary also on iOS

The below commit message is relevant for the behaviour fixed by this
change in the Collabora branch cp-6.0 (or core) and collabora-online-4
(of online). The behaviour here in master is broken in different ways,
though, and I am not entirely sure whether this change fixes anything
here. But let's apply it here, too, for consistency.

Until recently we had managed without them on iOS, but that changed
with the recent "Unipoll" work, I think. (Without this change, the iOS
app now runs into assertion failures early on. But note that this
change is not enough to make it work fully again.)

Change-Id: I09d25326ba73ce897da5c91f30530f5b3d5fd272
üst e55b3ad2
......@@ -77,9 +77,7 @@ SvpSalInstance::SvpSalInstance( std::unique_ptr<SalYieldMutex> pMutex )
m_nTimeoutMS = 0;
m_MainThread = osl::Thread::getCurrentIdentifier();
#ifndef IOS
CreateWakeupPipe(true);
#endif
if( s_pDefaultInstance == nullptr )
s_pDefaultInstance = this;
#if !defined(ANDROID) && !defined(IOS)
......@@ -91,13 +89,9 @@ SvpSalInstance::~SvpSalInstance()
{
if( s_pDefaultInstance == this )
s_pDefaultInstance = nullptr;
#ifndef IOS
CloseWakeupPipe(true);
#endif
}
#ifndef IOS
void SvpSalInstance::CloseWakeupPipe(bool log)
{
SvpSalYieldMutex *const pMutex(dynamic_cast<SvpSalYieldMutex*>(GetYieldMutex()));
......@@ -153,8 +147,6 @@ void SvpSalInstance::CreateWakeupPipe(bool log)
}
}
#endif
void SvpSalInstance::TriggerUserEventProcessing()
{
Wakeup();
......@@ -343,11 +335,7 @@ void SvpSalYieldMutex::doAcquire(sal_uInt32 const nLockCount)
m_bNoYieldLock = true;
bool const bEvents = pInst->DoYield(false, request == SvpRequest::MainThreadDispatchAllEvents);
m_bNoYieldLock = false;
#ifdef IOS
(void)bEvents;
#else
write(m_FeedbackFDs[1], &bEvents, sizeof(bool));
#endif
}
}
while (true);
......@@ -507,11 +495,9 @@ bool SvpSalInstance::DoYield(bool bWait, bool bHandleAllCurrentEvents)
: SvpRequest::MainThreadDispatchOneEvent);
bool bDidWork(false);
#ifndef IOS
// blocking read (for synchronisation)
auto const nRet = read(pMutex->m_FeedbackFDs[0], &bDidWork, sizeof(bool));
assert(nRet == 1); (void) nRet;
#endif
if (!bDidWork && bWait)
{
// block & release YieldMutex until the main thread does something
......
......@@ -73,9 +73,7 @@ private:
// at least one subclass of SvpSalInstance (GTK3) that doesn't use them.
friend class SvpSalInstance;
// members for communication from main thread to non-main thread
#ifndef IOS
int m_FeedbackFDs[2];
#endif
osl::Condition m_NonMainWaitingYieldCond;
// members for communication from non-main thread to main thread
bool m_bNoYieldLock = false; // accessed only on main thread
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment