svn commit: r184613 - user/kmacy/HEAD_fast_xmit/sys/net

Kip Macy kmacy at FreeBSD.org
Mon Nov 3 19:47:20 PST 2008


Author: kmacy
Date: Tue Nov  4 03:47:19 2008
New Revision: 184613
URL: http://svn.freebsd.org/changeset/base/184613

Log:
  don't leak rtentry references on insert failure

Modified:
  user/kmacy/HEAD_fast_xmit/sys/net/flowtable.c

Modified: user/kmacy/HEAD_fast_xmit/sys/net/flowtable.c
==============================================================================
--- user/kmacy/HEAD_fast_xmit/sys/net/flowtable.c	Tue Nov  4 03:42:01 2008	(r184612)
+++ user/kmacy/HEAD_fast_xmit/sys/net/flowtable.c	Tue Nov  4 03:47:19 2008	(r184613)
@@ -483,7 +483,7 @@ flowtable_set_hashkey(struct flowtable *
 		hashkey[i] = key[i];
 }
 
-static void
+static int
 flowtable_insert(struct flowtable *ft, uint32_t hash, uint32_t *key,
     uint8_t proto, struct rtentry *rt, u_char *desten, uint16_t flags)
 {
@@ -505,7 +505,7 @@ retry:	
 		}
 		FL_ENTRY_UNLOCK(ft, hash);
 		if (!stale)
-			return;
+			return (ENOSPC);
 		RTFREE(rt0);
 		/*
 		 * We might end up on a different cpu
@@ -522,6 +522,7 @@ retry:	
 	fle->f_uptime = time_uptime;
 	memcpy(fle->f_desten, desten, ETHER_ADDR_LEN);
 	FL_ENTRY_UNLOCK(ft, hash);
+	return (0);
 }
 
 void
@@ -670,10 +671,12 @@ uncached:
 #endif
 		route_to_rtentry_info(&ro, error ? NULL : desten, ri);
 
-		if (error == 0 && cache)
-			flowtable_insert(ft, hash, key, proto,
+		if (error == 0 && cache) {
+			error = flowtable_insert(ft, hash, key, proto,
 			    ro.ro_rt, desten, flags);
-		else
+				
+		} 
+		if (error || !cache)
 			RTFREE(ro.ro_rt);
 		error = 0;
 	} 


More information about the svn-src-user mailing list