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);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to