Deleted Added
full compact
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}