On 14 Aug 2015, at 4:17pm, skywind mailing lists <mailinglists at skywind.eu> 
wrote:

> this is the problem. I could never reproduce it by myself and even my 
> customers have normally no problems. But it happens once a year or so to one 
> of my customers.
> Still this is very annoying as it results in data loss.

I have seen a problem like this only in one context, and it had nothing to do 
with SQLite.  When an iDevice's power starts running low, it sends out 
notifications to all running Apps and expects their cooperation in shutting 
down.  An App is meant to react to the notification and shut down in less than 
(IIRC) 6 seconds, without depending on network connections and without using 
unusual amounts of power.

If one of the running Apps does not do this properly then the operating system 
is allowed to terminate it at (IIRC) 10 seconds, even if it is still working.  
But if the application is really annoying it can block other apps -- like yours 
-- from shutting down before the power is lost, by hogging resources like CPU 
or file storage.  So your app gets terminated at 10 seconds even though it 
wasn't given a chance to close its files.  Either by the OS or because the 
device just ran out of power.

This could happen because of a bug.  But I saw it happen in a big corporate 
application where the programmer decided that it just had to do a ton of 
communication with the server and clean up files every time the app quit.  
Reasonable on a desktop computer and a disaster on a phone.

Testing correct quit behaviour is part of Apple's approval process.  But it 
can't test every state the app may be in when it receives a quit notification.

So the thing that might be triggering your corruption is that your customer is 
running another application at the same time -- one which hogs resources so 
much that your own application doesn't get a chance to shut down cleanly before 
the power runs out.  You're never going to be able to figure out the problem in 
your own app, because there isn't one.  You need to look at the environment as 
a whole.

One possible way to proceed is to ask the customer what other apps they were 
likely to have had running when the device ran out of power.  Then google those 
apps and see if there is any suggestion that any of them might be badly written 
or badly behaved on shutdown.

Simon.

Reply via email to