From 23d0c979f70c9bf9894c1f90626d6616335fe470 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Fri, 20 Mar 2015 16:25:15 +0100 Subject: [PATCH] Force usage of virThreadCreate We want all threads to be set as workers or to have a job assigned to them, which can easily be achieved in virThreadCreate wrapper to pthread_create. Let's make sure we always use the wrapper. Signed-off-by: Jiri Denemark --- cfg.mk | 9 +++++++++ src/nwfilter/nwfilter_learnipaddr.c | 15 ++++++--------- src/nwfilter/nwfilter_learnipaddr.h | 1 - 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/cfg.mk b/cfg.mk index 6885f9e0f3..661cccc8fa 100644 --- a/cfg.mk +++ b/cfg.mk @@ -999,6 +999,12 @@ sc_prohibit_sysconf_pagesize: halt='use virGetSystemPageSize[KB] instead of sysconf(_SC_PAGESIZE)' \ $(_sc_search_regexp) +sc_prohibit_pthread_create: + @prohibit='\bpthread_create\b' \ + exclude='sc_prohibit_pthread_create' \ + halt="avoid using 'pthread_create', use 'virThreadCreate' instead" \ + $(_sc_search_regexp) + # We don't use this feature of maint.mk. prev_version_file = /dev/null @@ -1192,3 +1198,6 @@ exclude_file_name_regexp--sc_prohibit_virXXXFree = \ exclude_file_name_regexp--sc_prohibit_sysconf_pagesize = \ ^(cfg\.mk|src/util/virutil\.c)$$ + +exclude_file_name_regexp--sc_prohibit_pthread_create = \ + ^(cfg\.mk|src/util/virthread\.c|tests/.*)$$ diff --git a/src/nwfilter/nwfilter_learnipaddr.c b/src/nwfilter/nwfilter_learnipaddr.c index 1b875c3ebe..5b5505538f 100644 --- a/src/nwfilter/nwfilter_learnipaddr.c +++ b/src/nwfilter/nwfilter_learnipaddr.c @@ -374,7 +374,7 @@ procDHCPOpts(struct dhcp *dhcp, int dhcp_opts_len, * will require that the IP address was taken from an ARP packet or an IPv4 * packet. Both flags can be set at the same time. */ -static void * +static void learnIPAddressThread(void *arg) { char errbuf[PCAP_ERRBUF_SIZE] = {0}; @@ -638,8 +638,6 @@ learnIPAddressThread(void *arg) techdriver->applyDropAllRules(req->ifname); } - memset(&req->thread, 0x0, sizeof(req->thread)); - VIR_DEBUG("pcap thread terminating for interface %s\n", req->ifname); virNWFilterUnlockIface(req->ifname); @@ -648,8 +646,6 @@ learnIPAddressThread(void *arg) virNWFilterDeregisterLearnReq(req->ifindex); virNWFilterIPAddrLearnReqFree(req); - - return 0; } @@ -686,6 +682,7 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver, enum howDetect howDetect) { int rc; + virThread thread; virNWFilterIPAddrLearnReqPtr req = NULL; virNWFilterHashTablePtr ht = NULL; @@ -742,10 +739,10 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver, if (rc < 0) goto err_free_req; - if (pthread_create(&req->thread, - NULL, - learnIPAddressThread, - req) != 0) + if (virThreadCreate(&thread, + false, + learnIPAddressThread, + req) != 0) goto err_dereg_req; return 0; diff --git a/src/nwfilter/nwfilter_learnipaddr.h b/src/nwfilter/nwfilter_learnipaddr.h index 1cc881a782..b93ed38cff 100644 --- a/src/nwfilter/nwfilter_learnipaddr.h +++ b/src/nwfilter/nwfilter_learnipaddr.h @@ -49,7 +49,6 @@ struct _virNWFilterIPAddrLearnReq { enum howDetect howDetect; int status; - pthread_t thread; volatile bool terminate; };