Implementing Mutexes
Example 4-3 is a revision of Example 4-1 that uses a mutex to serialize access to race_list
.
Note
To save space, the functions race_ioctl
, race_new
, race_find
, and race_destroy
aren’t listed here, as they haven’t been changed.
Example 4-3. race_mtx.c
#include <sys/param.h> #include <sys/module.h> #include <sys/kernel.h> #include <sys/systm.h> #include <sys/conf.h> #include <sys/uio.h> #include <sys/malloc.h> #include <sys/ioccom.h> #include <sys/queue.h> #include <sys/lock.h> #include <sys/mutex.h> #include "race_ioctl.h" MALLOC_DEFINE(M_RACE, "race", "race object"); struct race_softc { LIST_ENTRY(race_softc) list; int unit; }; static LIST_HEAD(, race_softc) race_list = LIST_HEAD_INITIALIZER(&race_list); static struct mtx race_mtx; ...
Get FreeBSD Device Drivers now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.