Date: Sun, 17 Oct 2010 23:35:37 GMT From: Alexandre Fiveg <afiveg@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 184840 for review Message-ID: <201010172335.o9HNZbRx024939@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@184840?ac=10 Change 184840 by afiveg@cottonmouth on 2010/10/17 23:35:27 Small fixes: in the ringmap_detach() lock is set and extra cheking whether the list is empty. Moving locks in clear_capt_obj() Affected files ... .. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#50 edit .. //depot/projects/soc2010/ringmap/scripts/build_ringmap.sh#32 edit .. //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#33 edit .. //depot/projects/soc2010/ringmap/scripts/tailf_ringmap_msgs.sh#27 edit Differences ... ==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#50 (text+ko) ==== @@ -73,7 +73,7 @@ /* * The function should be called from attach function of generic network driver. * Here the ringmap structure is allocated and the character special device for - * the communication with user is created. + * the communication with user is created. Also default ringmap functions are set. */ struct ringmap * ringmap_attach(device_t dev, struct ringmap_functions *rf) @@ -125,7 +125,7 @@ /* Insert ringmap structure into the list */ SLIST_INSERT_HEAD(&ringmap_list_head, rm, entries); - /* Init the mutex to protecting our data */ + /* Init the mutex for protecting our data */ RINGMAP_LOCK_INIT(rm, device_get_nameunit(dev)); /* @@ -147,7 +147,7 @@ * ringmap */ return (rm); -} +} /* @@ -174,14 +174,21 @@ clear_capt_object((void *)co); } + RINGMAP_LOCK(rm); + /* To be sure */ + if (!SLIST_EMPTY(&rm->object_list)) { + RINGMAP_WARN(There are still active capturing objects); + } /* Destroy char device associated with ringmap */ if (rm->cdev != NULL) destroy_dev(rm->cdev); - RINGMAP_LOCK_DESTROY(rm); - /* And remove ringmap from global list */ SLIST_REMOVE(&ringmap_list_head, rm, ringmap, entries); + + RINGMAP_UNLOCK(rm); + + RINGMAP_LOCK_DESTROY(rm); FREE(rm, M_DEVBUF); @@ -192,7 +199,7 @@ /****************************************************************** - * This func will called as result of open(2). Here we allocate + * This func is called as result of open(2). Here we allocate * the memory for the new ring and capt_object structure (so called * capturing object). Capturing object represents the thread with * its ring. @@ -355,10 +362,8 @@ co = (struct capt_object *)data; + RINGMAP_LOCK(co->rm); if (co != NULL) { - - RINGMAP_LOCK(co->rm); - rm = co->rm; #if (__RINGMAP_DEB) printf("[%s] Object to delete:\n", __func__); @@ -376,12 +381,10 @@ } else { RINGMAP_WARN(Incorrect value of rm->open_cnt); } - - RINGMAP_UNLOCK(rm); - } else { RINGMAP_FUNC_DEBUG(NULL pointer to the capturing object!); } + RINGMAP_UNLOCK(rm); RINGMAP_FUNC_DEBUG(end); } ==== //depot/projects/soc2010/ringmap/scripts/build_ringmap.sh#32 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/scripts/set_ringmap.sh#33 (text+ko) ==== ==== //depot/projects/soc2010/ringmap/scripts/tailf_ringmap_msgs.sh#27 (text+ko) ====
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010172335.o9HNZbRx024939>