summaryrefslogtreecommitdiff
path: root/ipc.h (follow)
Commit message (Collapse)AuthorAge
* Dedoxify the source.Andre Noll2025-02-01
| | | | | | The doxygen comments actually make the source code harder to read, because they tend to document the obvious. Besides, they are not used uniformly accross the code base anyway.
* Compute ipc key only once.Andre Noll2024-05-23
| | | | | It's easier if dss.c passes the hash of the the config file path to the ipc functions than to pass a char pointer.
* Replace license boilerplate with single line SPDX comments.Andre Noll2017-11-19
| | | | | | | | | | | | | | | | | | | | This gets rid of existing copyright templates in favor of just the one-liner SPDX (Software Package Data Exchange) notice. All files are licensed under the GPL-2.0, so the same tag is added to each file. No copyright is changed by this commit. Several files (mostly the very short ones) did not contain a license text so far. By default all files without license information are under the default license of this package, which is GPL version 2. This commit adds the missing SPDX line so that now all files except dss.css, index.html.in, INSTALL, NEWS and README have it. We also remove author and copyright year, since the author is the same everywhere, and the year hasn't been updated any more since at least six years. Accurate information is available from the git log. The COPYING file can also be removed because the license text at https://spdx.org/licenses/GPL-2.0.html is immutable.
* Add the --kill subcommand.Andre Noll2012-06-01
| | | | | | | | | | | | | | | It works as follows: Whenever a semaphore operation is performed, the PID of the process is stored in the sempid field of the semaphore. This PID can be obtained from a different process by calling semctl with the GETPID command. com_kill() first tries to acquire the lock by calling the new mutex_try_lock() function of ipc.c. In contrast to mutex_lock(), mutex_try_lock() only operates on the first semaphore in the semaphore set, leaving the sempid field of the second semaphore unchanged. If mutex_try_lock() succeeds, no running dss process is holding the lock and the kill command fails. Otherwise, some dss process is running whose PID can be obtained by calling semctl() on the second semaphore.
* Use semaphore locking to avoid starting dss multiple times.Andre Noll2012-06-01
It's trickier than one might expect but it is hopefully also much better than any pidfile-based approach. This patch adds ipc.c and ipc.h containing the public lock_dss() function which acquires a semaphore-based lock whose key is based on the hash of the resolved path name of the dss config file. This allows different instances of dss to coexist. All semaphore operations are called with both the SEM_UNDO and the IPC_NOWAIT flag. SEM_UNDO guarantees that no stale lock remains after dss was killed by SIGKIlL while IPC_NOWAIT makes the call to lock_dss() fail if another process is already holding the lock. The prune/create/run commands simply take the lock at startup and exit if it could not be acquired. The underlying semaphore set contains two semaphores. This is necessary to implement the --kill subcommand which is done in a subsequent patch.