summaryrefslogtreecommitdiffstats
path: root/sbin/hastd/proto.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2010-08-05 17:56:41 +0000
committerpjd <pjd@FreeBSD.org>2010-08-05 17:56:41 +0000
commitd808f64f394be4d3083d37ff9be20e7e083b35c2 (patch)
tree48b475c8b7ae21f32d97a4a4382177b6c20ca836 /sbin/hastd/proto.c
parent956b0b5c7f6bf6165ab1c6fcdec2282fa03376f3 (diff)
downloadFreeBSD-src-d808f64f394be4d3083d37ff9be20e7e083b35c2.zip
FreeBSD-src-d808f64f394be4d3083d37ff9be20e7e083b35c2.tar.gz
Add an argument to the proto_register() function which allows protocol to
declare it is the default and be placed at the end of the queue so it is checked last. MFC after: 1 month
Diffstat (limited to 'sbin/hastd/proto.c')
-rw-r--r--sbin/hastd/proto.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sbin/hastd/proto.c b/sbin/hastd/proto.c
index 531e7e5..8f003de 100644
--- a/sbin/hastd/proto.c
+++ b/sbin/hastd/proto.c
@@ -52,13 +52,20 @@ struct proto_conn {
#define PROTO_SIDE_SERVER_WORK 2
};
-static LIST_HEAD(, hast_proto) protos = LIST_HEAD_INITIALIZER(protos);
+static TAILQ_HEAD(, hast_proto) protos = TAILQ_HEAD_INITIALIZER(protos);
void
-proto_register(struct hast_proto *proto)
+proto_register(struct hast_proto *proto, bool isdefault)
{
-
- LIST_INSERT_HEAD(&protos, proto, hp_next);
+ static bool seen_default = false;
+
+ if (!isdefault)
+ TAILQ_INSERT_HEAD(&protos, proto, hp_next);
+ else {
+ assert(!seen_default);
+ seen_default = true;
+ TAILQ_INSERT_TAIL(&protos, proto, hp_next);
+ }
}
static int
@@ -75,7 +82,7 @@ proto_common_setup(const char *addr, struct proto_conn **connp, int side)
if (conn == NULL)
return (-1);
- LIST_FOREACH(proto, &protos, hp_next) {
+ TAILQ_FOREACH(proto, &protos, hp_next) {
if (side == PROTO_SIDE_CLIENT)
ret = proto->hp_client(addr, &ctx);
else /* if (side == PROTO_SIDE_SERVER_LISTEN) */
OpenPOWER on IntegriCloud