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