Stephen J. Turnbull wrote:
>>>>>"Mats" == Mats Lidell
<matsl(a)xemacs.org> writes:
>>>>>
>>>>>
>>>>>Clemens wrote:
>>>>>
>>>>>
Clemens> [...] justified by the absence of a bug tracking system,
Clemens> [...]
Mats> What is the status regarding a bug tracking system? I
Mats> thought there was one on its way but then that was a long
Mats> time ago.
The BTS is me. At current rates of development, that's probably
preferable to an automated system, because w/o it people query
xemacs-beta and (eventually) I reply. If there were a BTS (a) they'd
see that nobody is watching and go away, and (b) I'd feel no pressure
to reply to queries because the BTS is on the job.
As for an automated system, nobody has actually put any effort into
doing anything about it. Bugzilla is unacceptable to me because it's
still very email unfriendly, and apparently nobody feels very strongly
about overriding my expressed preference. I've had a couple of offers
to do something, but the people involved wanted guidance about what to
use and would need substantial admin help from people with privileged
access to our hosts, anyway.
Anyway, a BTS is currently irrelevant. The core developers are either
responding to bug reports on their areas or they aren't; there's no
commitment to fixing bugs in general. In particular, I've forwarded
all of Clemens's bug reports to Ben, and heard nothing back yet. So
they're not going anywhere fast, and a BTS wouldn't speed it up.
Stephen, I did write you a long response to the first message you sent
me about this bug. did you not see it? it's attached again.
as for clemens' idea of allowing throw out of redisplay, that's not a
god idea because in some places the caller of redisplay() definitely
does not want to have what they're doing interrupted. of course, they
themselves should probably put the prison around redisplay, not have
redisplay() itself do it. but anyway ... examples are in event-msw.c,
in the windows procedure. as far as i know, longjmp[]ing out of a
window procedure is *not* a good idea.
{any windows programmers out there who can clarify whether longjmp[]ing
out of a window procedure is a bad idea?]
there are also some places where redisplay may be called where there is
a very explicit "prison" put around the code to prevent all longjmp[]s,
e.g. modal loops induced by clicking on the menu.
the proper solution is either
[1] provide a way to restart the throw after all "prison"s have exited
(perhaps the best general solution, if it works; but it may have subtle
problems; i'd have to think about it; for window procedures it would be
tricky because you'd have to figure out all the places where window
procedures are called, and continue the throw *outside* of those calls);
[2] avoid calling event code that triggers process-handling inside of
protected code; in the above message i show how it could be fixed in
this circumstance (and probably should; it's unlikely we want to see the
progress bar during pre-redisplay update, right?), but the same issue
can likely reoccur in a lot of different situations.
[3] probably the best solution in this case: in the code that wants to
`throw', what it should do instead is check to see whether its throw
will succeed, or be caught early (we would have to add a primitive to
return this status; it can just look at `inhibit_flags' and should
probably return a list of all the flags currently set; we'd also want to
consider removing the call to `with-trapping-errors', which is just
duplicative). if the throw will succeed, just throw; else, call
`enqueue-eval-event' to push an event to be called later. when this is
called, it does the exact same thing as before -- check if it's ok to
throw, throw if so, else call `enqueue-eval-event' again. (hopefully,
you won't get in an infinite loop pushing eval events! i think this
won't happen because inner loops are generally waiting for something
quite specific; but if this does happen, or you're worried about it
happening, instead of pushing an eval event it might work to push a
one-shot timeout event for a short time, e.g. 0.1 seconds).
ben