- don't call exit() if get_message() fails, simply terminate the thread and
disable the T tracer
- T_dont_fork disappears, monitor_and_kill() as well, so now it's only 2
processes: the main (enb/gnb/ue) and the local tracer
- 'busy' has to be handled in a more atomic fashion to avoid crazy
runtime race conditions
- the basic simulator is too fast sometimes; rewrite the accesses to
the T cache to avoid there again crazy behaviors
Hopefully that's better...
The T has 2 processes: the tracee and the local tracer
if the tracee dies (segfault or whatever) the tracee
may still be running.
So there is a third process that monitors those two others
and kill everything when one dies.
The problem is that this third process has to be the parent
of the two others. That makes debugging the tracee with gdb
impossible. This new option disables the third monitor process.
And it's sent at each connection attempt.
Before it was sent only once to the first tracer.
Plus there was a bug (length:(len) should have been length:(send_size)).
this may be removed at some point, it's very brutal. But when you
write some code, it may happen (it "may"!!) that *sometimes* the
code does not work and crashes. In thoses cases I prefer the
local tracer (or the tracee) to go away immediately without even
thinking about it maybe still running in the background.
In case of monitoring (as opposed to debugging) maybe it's preferable
to let the process live its life as it wants.
Time will tell.
first step: let the tracee connect before the remote tracer
and let's have a "no wait" mode where the local tracer starts
the tracee before the remote tracer is connected
as special events.
If we store all received events to a file, this dump is now
self-contained. Helps to analyze traces.
Some functions have also been factorized in the process, too much
duplication.
(Also tracer/Makefile was forgotten in previous commit, included
in this one...)