Dear Genodians,

I just stumbled across a not so obvious characteristic of the with_libc lambda. 
Not so obvious to me, at least.
If I run following code snipped, it will result in a "Error: Uncaught exception 
of type 'Genode::Exception'":


``` 
try {
        Libc::with_libc([&] () {
                throw Genode::Exception();
        });
} catch (...) {
        Genode::log("caught libc exception");
}
```

I didn't find any documentation regarding the with_libc lambda in combination 
with exceptions.
Is this expected behavior?
What would be the right pattern to forward the exception to a pure Genode 
environment e.g. across RPC boundaries?
I could think of following pattern:


``` 
bool libc_exception_thrown = false;
Libc::with_libc([&] () {
        try {
                throw Genode::Exception();
        } catch (...) {
                Genode::log("caught libc exception");
                libc_exception_thrown = true;
        }
});
if (libc_exception_thrown) {
        throw My_rpc_exception();
}
``` 

However, it does not look like the most elegant solution...

Cheers,
Sid


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Genode users mailing list
[email protected]
https://lists.genode.org/listinfo/users

Reply via email to