Hi,
When using the threaded router with the SpinoffSimpleReadThread() I've
just realised that Barry::Error exceptions aren't caught by DoRead or
the thread function. This means that if a
SocketDataHandler::DataReceived() method throws something such as
Barry::BadSize then it'll lead to a terminate as it's an uncaught exception.
I think there are two options here, forbid
SocketDataHandler::DataReceived() implementations from throwing
Barry::Error exceptions or catch all Barry::Error exceptions in
SocketRoutingQueue::DoRead(). I would favour the latter, calling the
appropriate SocketDataHandler::Error() with something like the following:
if( sdh ) {
// unlock& let the handler process it
lock.unlock();
- sdh->DataReceived(*buf.get());
+ try {
+ sdh->DataReceived(*buf.get());
+ }
+ catch( Barry::Error&be ) {
+ // Pass the error direct to the handler,
+ // this saves the need for every data handler
+ // implementation to wrap the method with
+ // a try catch.
+ sdh->Error(be);
+ }
return;
}
But I can see that having SocketDataHandler implementations handling their own
errors entirely internally might be a better idea.
Regards,
Toby
------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Barry-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/barry-devel