breaking yield loops on forced quit.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Noel,

	We've recently had problems with dialogs running in Online Kit
processes that are not cleaning up properly when the process is asked
to quit by the core.

	The proximate fix is/was to hard kill the remote process =)
but - I'd love to do better if possible.

	If you see vcl's:

Dialog::Execute () ...

    // Yield util EndDialog is called or dialog gets destroyed
    // (the latter should not happen, but better safe than sorry
    while ( !xWindow->IsDisposed() && mbInExecute )
        Application::Yield();

	You see one of these:

	while (condition)
		Application::Yield();

	archetypes. Of which there a dozen+ scattered around the code eg.

sfx2/source/doc/printhelper.cxx-                while( m_pPrinter->IsPrinting() )
sfx2/source/doc/printhelper.cxx:                    Application::Yield();

	etc. etc.

	We really want to forcibly exit these loops when we have our
VCL quit flag set cf.

vcl/headless/svpinst.cxx-                // External poll.
vcl/headless/svpinst.cxx-                if (pSVData->mpPollClosure != nullptr &&
vcl/headless/svpinst.cxx:                    pSVData->mpPollCallback(pSVData->mpPollClosure, nTimeoutMicroS) < 0)
vcl/headless/svpinst.cxx-                    pSVData->maAppData.mbAppQuit = true;

	Not least because Application:Yield becomes an instant-return when
we're trying to quit. So - we could add a flag:

	while (condition && !(new Application::mbAppQuit accessor)) 

	to all suspicious looking call-sites.

	Perhaps it'd be nicer to have a:

	Application::YieldWhile([]{ return m_pPrinter->IsPrinting(); });

	or somesuch - so we can add that this just once (?)

	Thoughts appreciated =)

		Michael.

-- 
michael.meeks@xxxxxxxxxxxxx <><, GM Collabora Productivity
Hangout: mejmeeks@xxxxxxxxx, Skype: mmeeks
(M) +44 7795 666 147 - timezone usually UK / Europe
_______________________________________________
LibreOffice mailing list
LibreOffice@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/libreoffice



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux