mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-10 13:40:25 +00:00
throw away the old signals simulation and more or less start again from scratch. vg_signals.c is nearly a complete rewrite. In fact this is now the third generation of the signals simulation. The purpose of this is to properly support signals in threads -- a nightmare combination. pthread_sigmask, pthread_kill and sigwait are now alledged to work as POSIX requires. In the process, throw away confusing and conceptually muddled old implementation and replace with something which is more verbose but conceptually cleaner, simpler and easier to argue is correct. * When the client does sigaction/sigprocmask et al, the resulting changes are stored verbatim in SCSS -- the Static Client Signal State. So SCSS is the state the client believes the kernel is in. * Every time SCSS changes, we recalculate the state the kernel *should* be in so that our signal simulation works. This is the SKSS -- Static Kernel Signal State. The kernel state is then updated accordingly. By diffing the new and old SKSSs, the number of real system calls made is minimised. * The dynamic state of the client's signals is stored in DCSS -- Dynamic Client Signal State. This just records which signals are pending for which threads. The big advantage of this scheme over the previous is that the SCSS -> SKSS mapping is made explicit and gathered all in one place, rather than spread out in a confusing way and done implicitly. That makes it all lot easier to decide if the mapping, which is really the heart of the signals simulation, is correct or not. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@271
11 KiB
11 KiB