[SyncEvolution] Help needed

Patrick Ohly patrick.ohly at intel.com
Sat Feb 27 13:53:59 UTC 2016


On Sat, 2016-02-20 at 13:32 +0100, deloptes wrote:
> Hi Patrick, all,
> 
> a stupid shortcut activation got the previous mail sent incomplete.
> 
> So in the LocalTransportAgent
> 
> we have
> 
>             while (! m_reportSent  && m_parent && s.getState() ==
> SuspendFlags::NORMAL ) {
>                step("waiting for parent's ACK for sync report");
>             }
> 
> which never completes.

Yes, that's where the "waiting for parent's ACK for sync report" comes
from that we've seen earlier in a stack backtrace.


> If I however execute this one by changing 
> 
>             if (! m_reportSent  && m_parent && s.getState() ==
> SuspendFlags::NORMAL ) {
>                step("waiting for parent's ACK for sync report");
>             }
> 
> it completes.

The sync may complete, but there's no guarantee anymore that the sending
of the report really works, because the client may proceed before the
parent got the report (IO not flushed).

> m_reportSent  should be fine. I did not go further, but I think it has to do
> with the step() and m_parent / s.getState and probably the threading. If I
> find something I'll post here.

Yes, it would be interesting to learn more about the state of the
process when it gets stuck. Even just the full log may be useful, in
particular the ordering of the "waiting for parent's ACK for sync
report" entries and the "sending sync report to parent: done" (assuming
it succeeds). See syncReportReceived() and the lines above it where it
is used as an asynchronous completion callback.

Looking at step() itself once more I am no longer sure whether it is
really as atomic as it needs to be. The SE_LOG_DEBUG() might involve
operations which clear the pending events such that the
g_main_context_iteration() gets stuck.

If you remove that one SE_LOG_DEBUG() in step(), does that help?

> The plugin runs in the snycevo-local-sync forked process. I noticed in the
> above use case the close() function is not called and I don't see anywhere
> (also in the html log) that it would destroy the object properly.

Which close() function?

-- 
Best Regards, Patrick Ohly

The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.






More information about the SyncEvolution mailing list