Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Nov 2008 03:47:19 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r184613 - user/kmacy/HEAD_fast_xmit/sys/net
Message-ID:  <200811040347.mA43lJVv085374@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 	} 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811040347.mA43lJVv085374>