[stgt] [PATCH 02/12] Wrap the event list access list with a mutex
Chandra Seetharaman
sekharan at us.ibm.com
Mon Sep 27 23:06:42 CEST 2010
Protect the global events list, tgt_events_list, with a lock.
Signed-off-by: Chandra Seetharaman <sekharan at us.ibm.com>
---
usr/tgtd.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
Index: tgt-102236c/usr/tgtd.c
===================================================================
--- tgt-102236c.orig/usr/tgtd.c
+++ tgt-102236c/usr/tgtd.c
@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <pthread.h>
#include <ctype.h>
#include <sys/resource.h>
#include <sys/epoll.h>
@@ -166,10 +167,15 @@ int do_tgt_event_add(int efd, struct lis
return err;
}
+static pthread_mutex_t tgt_events_lock;
int tgt_event_add(int fd, int events, event_handler_t handler, void *data)
{
- return do_tgt_event_add(ep_fd, &tgt_events_list, fd, events, handler,
+ int ret;
+ pthread_mutex_lock(&tgt_events_lock);
+ ret = do_tgt_event_add(ep_fd, &tgt_events_list, fd, events, handler,
data);
+ pthread_mutex_unlock(&tgt_events_lock);
+ return ret;
}
static struct event_data *tgt_event_lookup(struct list_head *list, int fd)
@@ -204,7 +210,9 @@ void do_tgt_event_del(int efd, struct li
void tgt_event_del(int fd)
{
+ pthread_mutex_lock(&tgt_events_lock);
do_tgt_event_del(ep_fd, &tgt_events_list, fd);
+ pthread_mutex_unlock(&tgt_events_lock);
}
int do_tgt_event_modify(int efd, struct list_head *list, int fd, int events)
@@ -227,7 +235,11 @@ int do_tgt_event_modify(int efd, struct
int tgt_event_modify(int fd, int events)
{
- return do_tgt_event_modify(ep_fd, &tgt_events_list, fd, events);
+ int ret;
+ pthread_mutex_lock(&tgt_events_lock);
+ ret = do_tgt_event_modify(ep_fd, &tgt_events_list, fd, events);
+ pthread_mutex_unlock(&tgt_events_lock);
+ return ret;
}
void tgt_init_sched_event(struct event_data *evt,
@@ -457,6 +469,7 @@ int main(int argc, char **argv)
sigaction(SIGINT, &sa_new, &sa_old);
sigaction(SIGPIPE, &sa_new, &sa_old);
sigaction(SIGTERM, &sa_new, &sa_old);
+ pthread_mutex_init(&tgt_events_lock, NULL);
pagesize = sysconf(_SC_PAGESIZE);
for (pageshift = 0;; pageshift++)
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list