aboutsummaryrefslogtreecommitdiff
path: root/sys/netgraph
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2004-07-14 20:31:05 +0000
committerRobert Watson <rwatson@FreeBSD.org>2004-07-14 20:31:05 +0000
commitc61340f374d73fee98e97198156adf86239b11b4 (patch)
treec6ba73e367815e5fcc5df71dbd878723b5b2f2e9 /sys/netgraph
parent489264ddae0ca4cb3f22065cffac463281a58d47 (diff)
downloadsrc-c61340f374d73fee98e97198156adf86239b11b4.tar.gz
src-c61340f374d73fee98e97198156adf86239b11b4.zip
Add a mutex ng_tty_mtx to protect the global variable ngt_unit. Note
that the locking of globals here isn't complete, and there's also a locking issue relating to calling into and out of the tty code.
Notes
Notes: svn path=/head/; revision=132163
Diffstat (limited to 'sys/netgraph')
-rw-r--r--sys/netgraph/ng_tty.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/netgraph/ng_tty.c b/sys/netgraph/ng_tty.c
index 9e4ecc31b40f..bd341da51639 100644
--- a/sys/netgraph/ng_tty.c
+++ b/sys/netgraph/ng_tty.c
@@ -166,10 +166,18 @@ static struct ng_type typestruct = {
};
NETGRAPH_INIT(tty, &typestruct);
+/*
+ * XXXRW: ngt_unit is protected by ng_tty_mtx. ngt_ldisc is constant once
+ * ng_tty is initialized. ngt_nodeop_ok is untouched, and might want to be a
+ * sleep lock in the future?
+ */
static int ngt_unit;
static int ngt_nodeop_ok; /* OK to create/remove node */
static int ngt_ldisc;
+static struct mtx ng_tty_mtx;
+MTX_SYSINIT(ng_tty, &ng_tty_mtx, "ng_tty", MTX_DEF);
+
/******************************************************************
LINE DISCIPLINE METHODS
******************************************************************/
@@ -214,7 +222,9 @@ ngt_open(struct cdev *dev, struct tty *tp)
FREE(sc, M_NETGRAPH);
goto done;
}
+ mtx_lock(&ng_tty_mtx);
snprintf(name, sizeof(name), "%s%d", typestruct.name, ngt_unit++);
+ mtx_unlock(&ng_tty_mtx);
/* Assign node its name */
if ((error = ng_name_node(sc->node, name))) {