[SyncEvolution] Help needed

deloptes deloptes at gmail.com
Mon Feb 29 00:34:00 UTC 2016


Thanks for finding time for that as well. Appreciated!

Patrick Ohly wrote:

> 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.
> 

Right before the loop it says
m_parent->m_storeSyncReport.start(report,                                             
boost::bind(&LocalTransportAgentChild::syncReportReceived, this, _1));

but I do not see "sending sync report to parent" in the log
It looks like it never gets called or something else, so m_reportSent stays
false and the loop never ends. I am afraid I was wrong about this previous
time , or perhaps confused.

> 
> 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).

> 
> 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.

After I terminate I do not see this in the logs. I see "waiting for parent's
ACK for sync report" only in the backtrace.
I also do not see "child sending sync report" in the log.

Do you mean I should upload/attach some log (the html ones?)

> 
> 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?

No.

> 
> 
> Which close() function?
> 

I mean "TrackingSyncSource::close()" implemented in the plugin. 

If I understand correctly I should put there the logic for saving changes.
In open() I set the resource/database and request a ticket, which would
close saving all changes if only close() would have been called.
In the log/dbg I see open finishing but no trace of close().
This could be related to the above problem as well, but please confirm that
I understand the usage properly.

thanks again and regards


_______________________________________________
SyncEvolution mailing list
SyncEvolution at syncevolution.org
https://lists.syncevolution.org/mailman/listinfo/syncevolution



More information about the SyncEvolution mailing list