Date: Thu, 5 Aug 2010 17:56:41 +0000 (UTC) From: Pawel Jakub Dawidek <pjd@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r210869 - head/sbin/hastd Message-ID: <201008051756.o75HufXE062428@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pjd Date: Thu Aug 5 17:56:41 2010 New Revision: 210869 URL: http://svn.freebsd.org/changeset/base/210869 Log: 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 Modified: head/sbin/hastd/proto.c head/sbin/hastd/proto_impl.h head/sbin/hastd/proto_socketpair.c head/sbin/hastd/proto_tcp4.c head/sbin/hastd/proto_uds.c Modified: head/sbin/hastd/proto.c ============================================================================== --- head/sbin/hastd/proto.c Thu Aug 5 17:48:37 2010 (r210868) +++ head/sbin/hastd/proto.c Thu Aug 5 17:56:41 2010 (r210869) @@ -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) { + static bool seen_default = false; - LIST_INSERT_HEAD(&protos, proto, hp_next); + 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, str 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) */ Modified: head/sbin/hastd/proto_impl.h ============================================================================== --- head/sbin/hastd/proto_impl.h Thu Aug 5 17:48:37 2010 (r210868) +++ head/sbin/hastd/proto_impl.h Thu Aug 5 17:56:41 2010 (r210869) @@ -64,10 +64,10 @@ struct hast_proto { hp_local_address_t *hp_local_address; hp_remote_address_t *hp_remote_address; hp_close_t *hp_close; - LIST_ENTRY(hast_proto) hp_next; + TAILQ_ENTRY(hast_proto) hp_next; }; -void proto_register(struct hast_proto *proto); +void proto_register(struct hast_proto *proto, bool isdefault); int proto_common_send(int fd, const unsigned char *data, size_t size); int proto_common_recv(int fd, unsigned char *data, size_t size); Modified: head/sbin/hastd/proto_socketpair.c ============================================================================== --- head/sbin/hastd/proto_socketpair.c Thu Aug 5 17:48:37 2010 (r210868) +++ head/sbin/hastd/proto_socketpair.c Thu Aug 5 17:56:41 2010 (r210869) @@ -271,5 +271,5 @@ static __constructor void sp_ctor(void) { - proto_register(&sp_proto); + proto_register(&sp_proto, false); } Modified: head/sbin/hastd/proto_tcp4.c ============================================================================== --- head/sbin/hastd/proto_tcp4.c Thu Aug 5 17:48:37 2010 (r210868) +++ head/sbin/hastd/proto_tcp4.c Thu Aug 5 17:56:41 2010 (r210869) @@ -515,5 +515,5 @@ static __constructor void tcp4_ctor(void) { - proto_register(&tcp4_proto); + proto_register(&tcp4_proto, true); } Modified: head/sbin/hastd/proto_uds.c ============================================================================== --- head/sbin/hastd/proto_uds.c Thu Aug 5 17:48:37 2010 (r210868) +++ head/sbin/hastd/proto_uds.c Thu Aug 5 17:56:41 2010 (r210869) @@ -326,5 +326,5 @@ static __constructor void uds_ctor(void) { - proto_register(&uds_proto); + proto_register(&uds_proto, false); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008051756.o75HufXE062428>