geom_event.c (93818) | geom_event.c (96987) |
---|---|
1/*- 2 * Copyright (c) 2002 Poul-Henning Kamp 3 * Copyright (c) 2002 Networks Associates Technology, Inc. 4 * All rights reserved. 5 * 6 * This software was developed for the FreeBSD Project by Poul-Henning Kamp 7 * and NAI Labs, the Security Research Division of Network Associates, Inc. 8 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the --- 18 unchanged lines hidden (view full) --- 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * | 1/*- 2 * Copyright (c) 2002 Poul-Henning Kamp 3 * Copyright (c) 2002 Networks Associates Technology, Inc. 4 * All rights reserved. 5 * 6 * This software was developed for the FreeBSD Project by Poul-Henning Kamp 7 * and NAI Labs, the Security Research Division of Network Associates, Inc. 8 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the --- 18 unchanged lines hidden (view full) --- 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * |
35 * $FreeBSD: head/sys/geom/geom_event.c 93818 2002-04-04 21:03:38Z jhb $ | 35 * $FreeBSD: head/sys/geom/geom_event.c 96987 2002-05-20 10:03:15Z phk $ |
36 */ 37 38/* 39 * XXX: How do we in general know that objects referenced in events 40 * have not been destroyed before we get around to handle the event ? 41 */ 42 43#include <sys/param.h> --- 49 unchanged lines hidden (view full) --- 93 pp, pp->name, error); 94 KASSERT(error != 0, 95 ("g_orphan_provider(%p(%s), 0) error must be non-zero\n", 96 pp, pp->name)); 97 pp->error = error; 98 mtx_lock(&g_doorlock); 99 TAILQ_INSERT_TAIL(&g_doorstep, pp, orphan); 100 mtx_unlock(&g_doorlock); | 36 */ 37 38/* 39 * XXX: How do we in general know that objects referenced in events 40 * have not been destroyed before we get around to handle the event ? 41 */ 42 43#include <sys/param.h> --- 49 unchanged lines hidden (view full) --- 93 pp, pp->name, error); 94 KASSERT(error != 0, 95 ("g_orphan_provider(%p(%s), 0) error must be non-zero\n", 96 pp, pp->name)); 97 pp->error = error; 98 mtx_lock(&g_doorlock); 99 TAILQ_INSERT_TAIL(&g_doorstep, pp, orphan); 100 mtx_unlock(&g_doorlock); |
101 mtx_lock(&Giant); | |
102 wakeup(&g_wait_event); | 101 wakeup(&g_wait_event); |
103 mtx_unlock(&Giant); | |
104} 105 106/* 107 * This function is called once on each provider which the event handler 108 * finds on its g_doorstep. 109 */ 110 111static void --- 121 unchanged lines hidden (view full) --- 233 ep->geom->event = NULL; 234 if (ep->provider != NULL) 235 ep->provider->event = NULL; 236 if (ep->consumer != NULL) 237 ep->consumer->event = NULL; 238 g_do_event(ep); 239 g_pending_events--; 240 if (g_pending_events == 0) { | 102} 103 104/* 105 * This function is called once on each provider which the event handler 106 * finds on its g_doorstep. 107 */ 108 109static void --- 121 unchanged lines hidden (view full) --- 231 ep->geom->event = NULL; 232 if (ep->provider != NULL) 233 ep->provider->event = NULL; 234 if (ep->consumer != NULL) 235 ep->consumer->event = NULL; 236 g_do_event(ep); 237 g_pending_events--; 238 if (g_pending_events == 0) { |
241 mtx_lock(&Giant); | |
242 wakeup(&g_pending_events); | 239 wakeup(&g_pending_events); |
243 mtx_unlock(&Giant); | |
244 } 245 g_topology_unlock(); 246 g_destroy_event(ep); 247 return (1); 248} 249 250void 251g_run_events() --- 30 unchanged lines hidden (view full) --- 282 } 283 if (cp != NULL) { 284 ep->consumer = cp; 285 KASSERT(cp->event == NULL, ("Double event on consumer")); 286 cp->event = ep; 287 } 288 g_pending_events++; 289 TAILQ_INSERT_TAIL(&g_events, ep, events); | 240 } 241 g_topology_unlock(); 242 g_destroy_event(ep); 243 return (1); 244} 245 246void 247g_run_events() --- 30 unchanged lines hidden (view full) --- 278 } 279 if (cp != NULL) { 280 ep->consumer = cp; 281 KASSERT(cp->event == NULL, ("Double event on consumer")); 282 cp->event = ep; 283 } 284 g_pending_events++; 285 TAILQ_INSERT_TAIL(&g_events, ep, events); |
290 mtx_lock(&Giant); | |
291 wakeup(&g_wait_event); | 286 wakeup(&g_wait_event); |
292 mtx_unlock(&Giant); | |
293} 294 295void 296g_event_init() 297{ 298 299 mtx_init(&g_doorlock, "GEOM orphanage", NULL, MTX_DEF); 300} | 287} 288 289void 290g_event_init() 291{ 292 293 mtx_init(&g_doorlock, "GEOM orphanage", NULL, MTX_DEF); 294} |