mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-29 21:26:51 +00:00
pf: add pf_release_staten and use it in pf_unlink_state
Saves one atomic op. Reviewed by: kp Sponsored by: Rubicon Communications, LLC ("Netgate")
This commit is contained in:
parent
175841285e
commit
d09388d013
|
@ -1510,6 +1510,17 @@ pf_release_state(struct pf_state *s)
|
|||
return (0);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
pf_release_staten(struct pf_state *s, u_int n)
|
||||
{
|
||||
|
||||
if (refcount_releasen(&s->refs, n)) {
|
||||
pf_free_state(s);
|
||||
return (1);
|
||||
} else
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern struct pf_state *pf_find_state_byid(uint64_t, uint32_t);
|
||||
extern struct pf_state *pf_find_state_all(struct pf_state_key_cmp *,
|
||||
u_int, int *);
|
||||
|
|
|
@ -1732,11 +1732,8 @@ pf_unlink_state(struct pf_state *s, u_int flags)
|
|||
PF_HASHROW_UNLOCK(ih);
|
||||
|
||||
pf_detach_state(s);
|
||||
/* pf_state_insert() initialises refs to 2, so we can never release the
|
||||
* last reference here, only in pf_release_state(). */
|
||||
(void)refcount_release(&s->refs);
|
||||
|
||||
return (pf_release_state(s));
|
||||
/* pf_state_insert() initialises refs to 2 */
|
||||
return (pf_release_staten(s, 2));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue