#199 <https://github.com/leo-editor/leo-editor/issues/199> is presently the 
most serious bug in Leo.  Sometimes, but not always, cancelling the load of 
an already-opened .leo file will hard crash Leo (Python).

This post is an Engineering Notebook post.  It's most notes to myself and 
Terry.  Feel free to ignore.

I am studying a core dump on Ubuntu.  It's been fun learning about 
apport-retrace 
<http://manpages.ubuntu.com/manpages/vivid/en/man1/apport-retrace.1.html>, 
but not *that *much fun.  Terry's analysis of the problem is good enough 
for me.  It's time to solve the problem with design, not mere code.



*The original problem*Leo should indeed warn users when they attempt to 
open an already-open file, call it *f.leo*.  Saving either copy of f.leo 
could destroy data previously saved in the *other* copy of f.leo.

The problem is not actually very serious, because Leo *already *warns if 
f.leo has been changed outside of the presently executing copy of Leo.  For 
example, suppose two invocations of Leo exists.  Let's call them *A* and *B*.  
Suppose Leo A saves f.leo. Later, if B saves f.leo, Leo B will issue a 
warning that f.leo has been changed outside of B.

Still, I think it is best to warn the user if f.leo is already open.

The mechanism for checking for already-open files is fine. Leo makes 
entries in the global db file when opening a file and deletes entries in 
the db when closing the file. This can lead to spurious "already open" 
messages if Leo is killed rather than being closed normally.  The db will 
contain an entry for a .leo file that is not, in fact, open. Happily, this 
has never been a big deal. Furthermore, the following scheme handles this 
case even more smoothly than before.

*Proposal: always open files, even if already open*

Leo will no longer issue *per-file* requests for guidance.  Instead, Leo 
will open all possibly-already-open files, putting warnings about them in 
the log. Finally, Leo will raise a *single *warning dialog.  This dialog 
will list the files that might already be open, and suggest that the user 
close duplicate files in whatever copy of Leo is more convenient.

This scheme solves several problems:

1. Leo always loads files. This instantly eliminates the possibility of 
hard crashes.

2. It's faster than the existing scheme.  The user only has to dismiss the 
summary dialog.

3. The user will never have to choose *right now *what action to take. Such 
choices are *always *odious and stressful.  Instead, the user can choose to 
close the duplicate f.leo file in either A or B.  In most cases, it's safe 
to leave *both* copies open, as long as both don't change.  To repeat, Leo 
will issue a warning if that happens.

4. Closing a duplicate file, in either A or B, automatically clears the db 
entry for that file.  There is no need to ask the user whether to reset the 
db!

The only complication will be knowing exactly when/where to issue the 
warning dialog.  The details will be different depending on whether Leo is 
loading multiple files at startup, or loading a single file later.  But 
this is only a coding detail.

*Summary*

A single dialog that warns about possibly-already-open files is the 
simplest thing that could possibly work:

- It's easy to code.
- It will stamp out hard crashes.
- It's simpler, faster, more flexible and less stressful for the user.

Unless there are strong objections to this scheme, I plan to put it into 
effect immediately.

Your comments, please, Amigos.

Edward
<http://manpages.ubuntu.com/apport-retrace>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to