Yes, I'm calling WDialog::exec() from within a posted event.

However, the exception is caused by calling WDialog::exec() and then having the 
session timeout.  It does not seem to be dependent on being called from 
WServer::post().

I can reproduce the problem by running examples/dialog/dialog.wt, and clicking 
the 'Familiar' button, which shows a dialog using WDialog::exec().  Once the 
"Personalia" dialog is displayed, leave the dialog showing, close the 
window/tab, and wait for the timeout.

[2012-Nov-19 08:50:46.369030] 22859 [/ 9sEovbI28uHH14WN] [info] "WebController: 
timeout: expiring"
[2012-Nov-19 08:50:46.369859] 22859 [/ 9sEovbI28uHH14WN] [error] "Wt: error 
during event handling: doRecursiveEventLoop(): session was killed"
[2012-Nov-19 08:50:46.370085] 22859 [/ 9sEovbI28uHH14WN] [error] "Wt: fatal 
error: doRecursiveEventLoop(): session was killed"




On Nov 19, 2012, at 1:46 AM, Koen Deforche <k...@emweb.be> wrote:

> Hey Boris,
> 
> I believe you're right, there seems to be some incompatibility with
> post() and recursive event loops.
> 
> Joseph, I'm correct that you are calling WDialog::exec() from within a
> posted event ?
> I would like to reproduce this behaviour in a small test case.
> 
> Regards,
> koen
> 
> 2012/11/17 Nagaev Boris <bnag...@gmail.com>:
>> Hello!
>> 
>> You are still using recursive event loop. Try not to use recursive
>> event loop with WServer::post(). Use WDialog->show() instead of
>> WDialog::exec(). Make sure to remove this WDialog, when it is closed.
>> 
>> On Sat, Nov 17, 2012 at 4:13 AM, Joseph VanAndel <vanan...@ucar.edu> wrote:
>>> OK, I've modified my application to use wApp->bind() as shown below.
>>> 
>>> Unfortunately, if a session dies, my application still crashes, as before:
>>> ==================
>>> terminate called after throwing an instance of 'Wt::WException'
>>>  what():  doRecursiveEventLoop(): session was killed
>>> 
>>> #5  0x00b3a183 in std::terminate() () from /usr/lib/libstdc++.so.6
>>> #6  0x00b3a2c2 in __cxa_throw () from /usr/lib/libstdc++.so.6
>>> #7  0x01767af8 in Wt::WebSession::doRecursiveEventLoop (
>>>    this=0xb5e3f850)
>>>    at /usr/local/src/wt-3.2.3/src/web/WebSession.C:1051
>>> #8  0x0143a7da in Wt::WDialog::exec (this=0x87fedb8,
>>>    animation=...) at /usr/local/src/wt-3.2.3/src/Wt/WDialog.C:292
>>> #9  0x08125562 in Login_GUI::confirm (this=0x87fed48,
>>>    message=..., info=..., id=..., passwd=..., name=...,
>>>    location=..., comment=...) at src/view/Login_GUI.cpp:75
>>> #10 0x0816e002 in UIServer::showLogin (this=0x876aeb8,
>>>    message=..., info=...) at src/view/UIServer.cpp:716
>>> #11 0x0816f107 in UIServer::processStatusEvent (this=0x876aeb8,
>>>    event=...) at src/view/UIServer.cpp:920
>>> #12 0x0816f01c in UIServer::notifyStatusEvent (this=0x876aeb8)
>>>    at src/view/UIServer.cpp:913
>>> #13 0x08150537 in boost::_mfi::mf0<void, UIServer>::operator() (
>>>    this=0x87fed10, p=0x876aeb8)
>>> ======================
>>> Although the session was killed, the WServer::post() call still invokes the 
>>> callback, which eventually tries to post a WDialog.   
>>> Wt::WebSession::doRecursiveEventLoop sees the session is dead, and throws 
>>> an error.
>>> 
>>> What I don't understand is how this could happen.  WServer::post() 
>>> schedules a call to
>>> WebController::handleApplicationEvent(), which checks whether the session 
>>> corresponding to sessionID is alive before it invokes the session's 
>>> callback.
>>> 
>>> 
>>> On Nov 13, 2012, at 9:30 AM, Joseph VanAndel <vanan...@ucar.edu> wrote:
>>> 
>>>> Yes, although the logic is more complex, I can have the bound function 
>>>> callback into the shared object to retrieve the data that I wanted to pass 
>>>> to the bound function.
>>>> 
>>>> For my application, I have a UIServer object (1 per session) and a 
>>>> StatusServer (singleton), which relays status messages between sessions.
>>>> UIServer ctor calls
>>>> StatusServer::connect( this,
>>>>    wApp->bind( boost::bind( &UIServer::notifyStatusEvent, this) ))
>>>> 
>>>> StatusServer::postStatusEvent() will save a copy of the event in a 
>>>> per-session queue.
>>>> and  calls WServer::post(sessionid, callback), which indirectly calls
>>>> UIServer::notifyStatusEvent()
>>>> 
>>>> UIServer::notifyStatusEvent() calls
>>>> StatusServer::getEvent() to retrieve the event, and call
>>>> UIServer::processStatusEvent() to handle the StatusEvent.
>>>> 
>>>> 
>>>> It would be quite helpful if <Wt_src>/examples/simplechat used 
>>>> WApplication::bind().
>>>> 
>>>> I appreciate any examples, but examples that correctly handle real-world 
>>>> situations, like browser sessions being closed are MUCH more useful.  As 
>>>> far as I can tell, because simplechat doesn't use WApplication::bind(), it 
>>>> may not safely handle browser sessions that are closed.
>>>> 
>>>> If I get the chance, I'll submit a rewritten simplechat example that uses 
>>>> WApplication::bind(), but as they say "It won't be pretty!"
>>>> 
>>>> 
>>>> On Nov 13, 2012, at 4:44 AM, Koen Deforche wrote:
>>>> 
>>>>> Hey Joseph, Rob,
>>>>> 
>>>>> I guess you are both indicating a limitation: WApplication::bind()
>>>>> essentially returns a function without arguments, and thus all
>>>>> arguments already have to be bound before the call, which makes it
>>>>> useless when you want to pass on information from the external source.
>>>>> 
>>>>> As a workaround, perhaps you can rather than 'push' new information,
>>>>> make the bound function 'poll' the information from the shared object
>>>>> ?
>>>>> 
>>>>> I believe it should be possible to make WApplication::bind() work
>>>>> properly with any kind of function, including functions with free
>>>>> parameters -- although that requires a bit of digging into the
>>>>> meta-function possiblities of boost-ified c++...
>>>>> 
>>>>> In any case, using WApplication::bind() later on is not very useful --
>>>>> it needs to happen with the session lock and with the objects bound
>>>>> guaranteed to be alive at the moment of calling WApplication::bind().
>>>>> 
>>>>> Regards,
>>>>> koen
>>>>> 
>>>>> ------------------------------------------------------------------------------
>>>>> Monitor your physical, virtual and cloud infrastructure from a single
>>>>> web console. Get in-depth insight into apps, servers, databases, vmware,
>>>>> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
>>>>> Pricing starts from $795 for 25 servers or applications!
>>>>> http://p.sf.net/sfu/zoho_dev2dev_nov
>>>>> _______________________________________________
>>>>> witty-interest mailing list
>>>>> witty-interest@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/witty-interest
>>>> 
>>>> 
>>>> ------------------------------------------------------------------------------
>>>> Monitor your physical, virtual and cloud infrastructure from a single
>>>> web console. Get in-depth insight into apps, servers, databases, vmware,
>>>> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
>>>> Pricing starts from $795 for 25 servers or applications!
>>>> http://p.sf.net/sfu/zoho_dev2dev_nov
>>>> _______________________________________________
>>>> witty-interest mailing list
>>>> witty-interest@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/witty-interest
>>> 
>>> 
>>> ------------------------------------------------------------------------------
>>> Monitor your physical, virtual and cloud infrastructure from a single
>>> web console. Get in-depth insight into apps, servers, databases, vmware,
>>> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
>>> Pricing starts from $795 for 25 servers or applications!
>>> http://p.sf.net/sfu/zoho_dev2dev_nov
>>> _______________________________________________
>>> witty-interest mailing list
>>> witty-interest@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/witty-interest
>> 
>> ------------------------------------------------------------------------------
>> Monitor your physical, virtual and cloud infrastructure from a single
>> web console. Get in-depth insight into apps, servers, databases, vmware,
>> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
>> Pricing starts from $795 for 25 servers or applications!
>> http://p.sf.net/sfu/zoho_dev2dev_nov
>> _______________________________________________
>> witty-interest mailing list
>> witty-interest@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/witty-interest
> 
> ------------------------------------------------------------------------------
> Monitor your physical, virtual and cloud infrastructure from a single
> web console. Get in-depth insight into apps, servers, databases, vmware,
> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
> Pricing starts from $795 for 25 servers or applications!
> http://p.sf.net/sfu/zoho_dev2dev_nov
> _______________________________________________
> witty-interest mailing list
> witty-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/witty-interest


------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
witty-interest mailing list
witty-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/witty-interest

Reply via email to