From owner-svn-src-all@FreeBSD.ORG Thu Aug 5 17:56:41 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6FB7B1065673; Thu, 5 Aug 2010 17:56:41 +0000 (UTC) (envelope-from pjd@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5E2BC8FC17; Thu, 5 Aug 2010 17:56:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o75Huflw062434; Thu, 5 Aug 2010 17:56:41 GMT (envelope-from pjd@svn.freebsd.org) Received: (from pjd@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o75HufXE062428; Thu, 5 Aug 2010 17:56:41 GMT (envelope-from pjd@svn.freebsd.org) Message-Id: <201008051756.o75HufXE062428@svn.freebsd.org> From: Pawel Jakub Dawidek Date: Thu, 5 Aug 2010 17:56:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210869 - head/sbin/hastd X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Aug 2010 17:56:41 -0000 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); }