Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do not convert TimeoutError to xbt_ex(timeout) in case they were a wait_any
authorMartin Quinson <martin.quinson@loria.fr>
Sat, 25 Aug 2018 22:36:16 +0000 (00:36 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Sat, 25 Aug 2018 22:51:32 +0000 (00:51 +0200)
commitc89cb255c89dd438dd1188565e98063da7dec57d
tree9cf44359f188388eab93a743c652d43f96b67e55
parent5d3e71cc5617674a92703e4b45d9b9951aed7d0a
Do not convert TimeoutError to xbt_ex(timeout) in case they were a wait_any

If there is an issue while dealing with a test_any or a wait_any, the
caller must be told which activity failed. I'm not sure of how to
cleanly do so. For now, we use exception.value to store the rank of
that activity in the container.

To modify the exception, C++ leaves us no way but to rethrow it and
recatch it, change its value field, and re-store it in the
issuer->exception.  But then, the exception become of the catching
type. Wicked! Vicious! It means that since we were catching (xbt_ex&
e), we actually converted the simgrid::TimeoutException into a xbt_ex.

And this conversion was done in any case, even if the value was set
only if the simcall was actually a wait_any or test_any...

With this commit, we catch, extend and rethrow any TimeoutException,
and if it's not such an xbt_ex, we do the same for a xbt_ex.

A proper version could involve a WaitAnyException (with failing_rank
and cause fields), or maybe the TimeoutException could contain a
pointer to the timeouted activity so that the caller can find its rank
by itself.
src/simix/smx_network.cpp