summaryrefslogtreecommitdiff
path: root/documentation
diff options
context:
space:
mode:
Diffstat (limited to 'documentation')
-rw-r--r--documentation/src/wayland.dox27
1 files changed, 24 insertions, 3 deletions
diff --git a/documentation/src/wayland.dox b/documentation/src/wayland.dox
index 6f78dfb7e..5eba86156 100644
--- a/documentation/src/wayland.dox
+++ b/documentation/src/wayland.dox
@@ -590,9 +590,30 @@ is increased to <tt>2 * size</tt>. This mechanism allows to access new mmap'ed m
\c chunk_offset reaches the end of the previous mmap'ed section, and to enlarge the size of the
mmap'ed memory when necessary.
-Wayland object <tt>struct wl_shm_pool</tt> guarantees that the corresponding mmap'ed memory will be
-freed when all \c wl_buffer objects which encapsulate sections of this mmap'ed memory have been
-destroyed.
+To free the memory used by a \c wl_shm_pool object, it's not enough to destroy
+all \c wl_buffer objects built from this \c wl_shm_pool object and to call
+\c wl_shm_pool_destroy(). It's also necessary to call \c munmap() on the mmap'ed memory
+shared between the client and the compositor and encapsulated by the \c wl_shm_pool.
+This explains this type definition inside class \c Fl_Wayland_Graphics_Driver:
+\code
+ struct wld_shm_pool_data { // attached to wl_shm_pool objects
+ char *pool_memory; // start of mmap'ed memory encapsulated by the wl_shm_pool
+ int pool_size; // size of encapsulated memory
+ int use_count; // nber of active wl_buffer objects in this wl_shm_pool
+ bool destroyed; // true after the wl_shm_pool was destroyed
+ };
+\endcode
+A record of this type is created for each \c wl_shm_pool object and attached to it with
+a call to \c wl_shm_pool_set_user_data(). This record contains the starting address
+and the size of the mmap'ed memory section necessary for a future \c munmap() call.
+Member \c destroyed is turned to \c true after the call to \c wl_shm_pool_destroy().
+Member \c use_count starts at 0, is incremented each time a \c wl_buffer is created from
+this \c wl_shm_pool and decremented each time a \c wl_buffer is destroyed.
+The same record is also associated to each \c wl_buffer object created from
+this \c wl_shm_pool by \c wl_buffer_set_user_data().
+Overall, this allows FLTK to detect when all \c wl_buffer objects
+from a \c wl_shm_pool have been destroyed and to call \c munmap() to complete the release
+of that pool's memory resources.
Wayland uses also \c wl_buffer objects to support cursors, and
FLTK uses the "buffer factory" described here also when creating custom cursors (see