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 <jdenemar@redhat.com>
This commit is contained in:
Jiri Denemark 2015-03-20 16:25:15 +01:00
parent 956953884e
commit 23d0c979f7
3 changed files with 15 additions and 10 deletions

9
cfg.mk
View File

@ -999,6 +999,12 @@ sc_prohibit_sysconf_pagesize:
halt='use virGetSystemPageSize[KB] instead of sysconf(_SC_PAGESIZE)' \ halt='use virGetSystemPageSize[KB] instead of sysconf(_SC_PAGESIZE)' \
$(_sc_search_regexp) $(_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. # We don't use this feature of maint.mk.
prev_version_file = /dev/null prev_version_file = /dev/null
@ -1192,3 +1198,6 @@ exclude_file_name_regexp--sc_prohibit_virXXXFree = \
exclude_file_name_regexp--sc_prohibit_sysconf_pagesize = \ exclude_file_name_regexp--sc_prohibit_sysconf_pagesize = \
^(cfg\.mk|src/util/virutil\.c)$$ ^(cfg\.mk|src/util/virutil\.c)$$
exclude_file_name_regexp--sc_prohibit_pthread_create = \
^(cfg\.mk|src/util/virthread\.c|tests/.*)$$

View File

@ -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 * 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. * packet. Both flags can be set at the same time.
*/ */
static void * static void
learnIPAddressThread(void *arg) learnIPAddressThread(void *arg)
{ {
char errbuf[PCAP_ERRBUF_SIZE] = {0}; char errbuf[PCAP_ERRBUF_SIZE] = {0};
@ -638,8 +638,6 @@ learnIPAddressThread(void *arg)
techdriver->applyDropAllRules(req->ifname); techdriver->applyDropAllRules(req->ifname);
} }
memset(&req->thread, 0x0, sizeof(req->thread));
VIR_DEBUG("pcap thread terminating for interface %s\n", req->ifname); VIR_DEBUG("pcap thread terminating for interface %s\n", req->ifname);
virNWFilterUnlockIface(req->ifname); virNWFilterUnlockIface(req->ifname);
@ -648,8 +646,6 @@ learnIPAddressThread(void *arg)
virNWFilterDeregisterLearnReq(req->ifindex); virNWFilterDeregisterLearnReq(req->ifindex);
virNWFilterIPAddrLearnReqFree(req); virNWFilterIPAddrLearnReqFree(req);
return 0;
} }
@ -686,6 +682,7 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver,
enum howDetect howDetect) enum howDetect howDetect)
{ {
int rc; int rc;
virThread thread;
virNWFilterIPAddrLearnReqPtr req = NULL; virNWFilterIPAddrLearnReqPtr req = NULL;
virNWFilterHashTablePtr ht = NULL; virNWFilterHashTablePtr ht = NULL;
@ -742,10 +739,10 @@ virNWFilterLearnIPAddress(virNWFilterTechDriverPtr techdriver,
if (rc < 0) if (rc < 0)
goto err_free_req; goto err_free_req;
if (pthread_create(&req->thread, if (virThreadCreate(&thread,
NULL, false,
learnIPAddressThread, learnIPAddressThread,
req) != 0) req) != 0)
goto err_dereg_req; goto err_dereg_req;
return 0; return 0;

View File

@ -49,7 +49,6 @@ struct _virNWFilterIPAddrLearnReq {
enum howDetect howDetect; enum howDetect howDetect;
int status; int status;
pthread_t thread;
volatile bool terminate; volatile bool terminate;
}; };