Re: help!
Carlo Capelli <[email protected]>
| Newsgroups | gmane.comp.ai.prolog.swi |
|---|---|
| Message-ID | <CABty9wyAWPFmNjV0SXZ2nHeF1kvyrS44FAwBxiC3p2x50N4szw@mail.gmail.com> |
Hi Jan Sorry, but something it's going wrong... I just did a git clone pl-devel (after removing previous), but ./prepare fails... ... Cloning into packages/xpce... remote: Counting objects: 38173, done. remote: Compressing objects: 100% (7320/7320), done. remote: Total 38173 (delta 30908), reused 37568 (delta 30465) Receiving objects: 100% (38173/38173), 13.63 MiB | 827 KiB/s, done. Resolving deltas: 100% (30908/30908), done. fatal: reference is not a tree: 0a4610459faf0eae5714da4f619e50517112e467 Unable to checkout '0a4610459faf0eae5714da4f619e50517112e467' in submodule path 'packages/xpce' The following submodules are not up-to-date packages/xpce Do you want me to run git submodule update? If I answer yes, (note, I already answered yes to same question immediately after ./prepare) it continue with documentation. But xpce it's the patched one, I feel I will not get an updated source tree... 2014/1/22 Carlo Capelli <[email protected]> > > > > 2014/1/22 Jan Wielemaker <[email protected]> > >> Hi Carlo, >> >> >> On 01/21/2014 10:28 AM, Carlo Capelli wrote: >> >>> Hi Jan >>> >>> Sorry to bother you, but I was trying to understand why I can't catch >>> exceptions when calling on background thread, and stumbled upon a weird >>> behaviour of the standard - not Qt - console. >>> >>> Briefly, ?- help. hangs. >>> >>> carlo@ubuntu-carlo-64:~$ swipl >>> % .plrc compiled 0.07 sec, 1,574 clauses >>> Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.5-DIRTY) >>> Copyright (c) 1990-2013 University of Amsterdam, VU Amsterdam >>> SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, >>> and you are welcome to redistribute it under certain conditions. >>> Please visit http://www.swi-prolog.org for details. >>> >>> For help, use ?- help(Topic). or ?- apropos(Word). >>> >>> ?- help. >>> ^C^C >>> [forced] Action (h for help) ? goals >>> [23] pce_principal:send(@2182115/pui_toc, root(toc_folder('Manual', >>> manual, resource(manual), resource(book)))) >>> [20] pce_principal:new(_G6283, pui_toc) >>> [19] Send-method on @pui_help_window/pui_manual: >>> pui_manual->table_of_contents >>> [17] pce_principal:send(@pui_help_window/pui_manual, >>> table_of_contents) >>> [14] pce_principal:send(new(@pui_help_window/pui_manual, pui_manual), >>> open) >>> >>> [forced] Action (h for help) ? >>> >>> Note the double ^C... >>> >> >> I can't reproduce that. Looks like a deadlock. Note that xpce is not >> multi-threaded. It has a big lock around all its operations to make it >> thread-safe. There is in_pce_thread/1 to run asynchronously in the >> pce thread. >> >> If the default behaviour is as above, either your compilation is >> corrupted or you have something in your ~/.plrc that breaks this. >> >> >> In Qt console, win_menu:help, called on background, hangs, and the main >>> thread got confused, hangs itself... It's a bit unfortunate, as this is >>> probably one of the first menu a casual user will try... >>> >> >> I submitted a patch for xpce to use in_pce_thread/1 for help/0 and quite >> a few others. This might fix this. >> >> > Thanks Jan, going to try immediately... > > >> Since I hope the problems are (at least loosely) related, I wonder if >>> some >>> setting from C side could inhibit exceptions from working. Seems related >>> to >>> threading, since try {} catch {} works as expected in a simple setting >>> (let's say, from main). >>> >>> BTW, the reason ?- help. doesn't work get explained after two abort... >>> >>> [forced] Action (h for help) ? abort >>> ERROR: pce(object) `@pui_help_window' does not exist >>> Exception: (6) online_help:help ? abort >>> % Execution Aborted >>> ?- help. >>> >>> SWI-Prolog [thread 1]: received fatal signal 11 (segv) >>> Stack trace labeled "crash": >>> [0] crashHandler+0x36 >>> [1] dispatch_signal+0x44d >>> [2] __restore_rt+(nil) >>> [3] pthread_cond_signal+0xa >>> Annullato >>> >> >> Using ^C sends a Prolog signal. These are handled synchronously at >> a safe point in the execution. Some foreign code simply blocks and >> does not handle (Prolog) signals. Now, if you hit ^C the second >> time before the first one was honored, it will say [forced] and >> call the interrupt handler directly from the C signal function >> rather than through the Prolog signal handler. If you abort, you >> basically do a longjmp() out of the current environment, leaving >> the system in an unknown state. Anything may happen, in particular >> if you break forcefully out of thread synchronization primitives >> because these are not signal-safe. >> >> Cheers --- Jan >> >> >> > -------------- next part -------------- HTML attachment scrubbed and removed