wayland: Allow mapping more than one shm buffer at the same time
The shared memory buffer may need to install a SIGBUS handler if the compositor may access the data outside of the buffer.
However, signal handling requires great care. For the simplicity sake, only one shared memory buffer is allowed to be accessed at the time. But such a restricted access policy is inconvenient and requires us making client buffer contents copies.
This change eases the restrictions on map() and unmap() functions so several buffers can be accessed simulatenously.
Note that atomic pointers are used because a signal handler can be invoked at any point in the main thread's execution. Even though "a = b" is a single operation from the developer's pov, it can take several steps for the CPU to store a new value to the variable. The atomic pointers ensure that assignments to the next and s_accessedBuffers happen atomically.
Also keep in mind that we cannot start removing copy() calls yet because the ShmClientBuffer life time management requires further changes, which I believe, are out of the scope of this patch.