From f2fdd3040cf6fabcae3ff889d13349abdaaf9e0c Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sun, 4 Nov 2012 17:06:41 +0000 Subject: [PATCH] rx: Make rxevent_Put NULL the event ptr being put Change rxevent_Put so that it takes a pointer to the event being put, and NULLs that pointer. This removes a lot of duplicate code in callers, as well as making it harder to reuse a discarded event. Change-Id: Ib7a51f01687e08ea3dced5932ec9ec27797a784a Reviewed-on: http://gerrit.openafs.org/8540 Tested-by: BuildBot Reviewed-by: Derrick Brashear Reviewed-by: Jeffrey Altman --- src/rx/rx.c | 55 ++++++++++++++++++++---------------------------------- src/rx/rx_event.c | 6 ++++-- src/rx/rx_event.h | 2 +- tests/rx/event-t.c | 2 +- 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index e95fc0e..a2ac7b5 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -3719,10 +3719,8 @@ rxi_CheckReachEvent(struct rxevent *event, void *arg1, void *arg2, int dummy) MUTEX_ENTER(&conn->conn_data_lock); - if (event) { - rxevent_Put(conn->checkReachEvent); - conn->checkReachEvent = NULL; - } + if (event) + rxevent_Put(&conn->checkReachEvent); waiting = conn->flags & RX_CONN_ATTACHWAIT; if (event) { @@ -4930,20 +4928,16 @@ rxi_SendDelayedAck(struct rxevent *event, void *arg1, void *unused1, #ifdef RX_ENABLE_LOCKS if (event) { MUTEX_ENTER(&call->lock); - if (event == call->delayedAckEvent) { - rxevent_Put(call->delayedAckEvent); - call->delayedAckEvent = NULL; - } + if (event == call->delayedAckEvent) + rxevent_Put(&call->delayedAckEvent); CALL_RELE(call, RX_CALL_REFCOUNT_DELAY); } (void)rxi_SendAck(call, 0, 0, RX_ACK_DELAY, 0); if (event) MUTEX_EXIT(&call->lock); #else /* RX_ENABLE_LOCKS */ - if (event) { - rxevent_Put(call->delayedAckEvent); - call->delayedAckEvent = NULL; - } + if (event) + rxevent_Put(&call->delayedAckEvent); (void)rxi_SendAck(call, 0, 0, RX_ACK_DELAY, 0); #endif /* RX_ENABLE_LOCKS */ } @@ -5972,8 +5966,7 @@ rxi_Resend(struct rxevent *event, void *arg0, void *arg1, int istack) * event pending. */ if (event == call->resendEvent) { CALL_RELE(call, RX_CALL_REFCOUNT_RESEND); - rxevent_Put(call->resendEvent); - call->resendEvent = NULL; + rxevent_Put(&call->resendEvent); } rxi_CheckPeerDead(call); @@ -6469,16 +6462,14 @@ rxi_NatKeepAliveEvent(struct rxevent *event, void *arg1, MUTEX_ENTER(&rx_refcnt_mutex); /* Only reschedule ourselves if the connection would not be destroyed */ if (conn->refCount <= 1) { - rxevent_Put(conn->natKeepAliveEvent); - conn->natKeepAliveEvent = NULL; + rxevent_Put(&conn->natKeepAliveEvent); MUTEX_EXIT(&rx_refcnt_mutex); MUTEX_EXIT(&conn->conn_data_lock); rx_DestroyConnection(conn); /* drop the reference for this */ } else { conn->refCount--; /* drop the reference for this */ MUTEX_EXIT(&rx_refcnt_mutex); - rxevent_Put(conn->natKeepAliveEvent); - conn->natKeepAliveEvent = NULL; + rxevent_Put(&conn->natKeepAliveEvent); rxi_ScheduleNatKeepAliveEvent(conn); MUTEX_EXIT(&conn->conn_data_lock); } @@ -6531,10 +6522,8 @@ rxi_KeepAliveEvent(struct rxevent *event, void *arg1, void *dummy, CALL_RELE(call, RX_CALL_REFCOUNT_ALIVE); MUTEX_ENTER(&call->lock); - if (event == call->keepAliveEvent) { - rxevent_Put(call->keepAliveEvent); - call->keepAliveEvent = NULL; - } + if (event == call->keepAliveEvent) + rxevent_Put(&call->keepAliveEvent); now = clock_Sec(); @@ -6570,10 +6559,8 @@ rxi_GrowMTUEvent(struct rxevent *event, void *arg1, void *dummy, int dummy2) CALL_RELE(call, RX_CALL_REFCOUNT_MTU); MUTEX_ENTER(&call->lock); - if (event == call->growMTUEvent) { - rxevent_Put(call->growMTUEvent); - call->growMTUEvent = NULL; - } + if (event == call->growMTUEvent) + rxevent_Put(&call->growMTUEvent); if (rxi_CheckCall(call, 0)) { MUTEX_EXIT(&call->lock); @@ -6704,8 +6691,7 @@ rxi_SendDelayedConnAbort(struct rxevent *event, void *arg1, void *unused, struct rx_packet *packet; MUTEX_ENTER(&conn->conn_data_lock); - rxevent_Put(conn->delayedAbortEvent); - conn->delayedAbortEvent = NULL; + rxevent_Put(&conn->delayedAbortEvent); error = htonl(conn->error); conn->abortCount++; MUTEX_EXIT(&conn->conn_data_lock); @@ -6731,8 +6717,7 @@ rxi_SendDelayedCallAbort(struct rxevent *event, void *arg1, void *dummy, struct rx_packet *packet; MUTEX_ENTER(&call->lock); - rxevent_Put(call->delayedAbortEvent); - call->delayedAbortEvent = NULL; + rxevent_Put(&call->delayedAbortEvent); error = htonl(call->error); call->abortCount++; packet = rxi_AllocPacket(RX_PACKET_CLASS_SPECIAL); @@ -6756,10 +6741,8 @@ rxi_ChallengeEvent(struct rxevent *event, { struct rx_connection *conn = arg0; - if (event) { - rxevent_Put(conn->challengeEvent); - conn->challengeEvent = NULL; - } + if (event) + rxevent_Put(&conn->challengeEvent); if (RXS_CheckAuthentication(conn->securityObject, conn) != 0) { struct rx_packet *packet; @@ -6984,6 +6967,7 @@ rxi_ReapConnections(struct rxevent *unused, void *unused1, void *unused2, int unused3) { struct clock now, when; + struct rxevent *event; clock_GetTime(&now); /* Find server connection structures that haven't been used for @@ -7188,7 +7172,8 @@ rxi_ReapConnections(struct rxevent *unused, void *unused1, void *unused2, when = now; when.sec += RX_REAP_TIME; /* Check every RX_REAP_TIME seconds */ - rxevent_Put(rxevent_Post(&when, &now, rxi_ReapConnections, 0, NULL, 0)); + event = rxevent_Post(&when, &now, rxi_ReapConnections, 0, NULL, 0); + rxevent_Put(&event); } diff --git a/src/rx/rx_event.c b/src/rx/rx_event.c index 99d46b6..6638e5b 100644 --- a/src/rx/rx_event.c +++ b/src/rx/rx_event.c @@ -155,8 +155,10 @@ rxevent_put(struct rxevent *ev) { } void -rxevent_Put(struct rxevent *ev) { - rxevent_put(ev); +rxevent_Put(struct rxevent **ev) +{ + rxevent_put(*ev); + *ev = NULL; } static_inline struct rxevent * diff --git a/src/rx/rx_event.h b/src/rx/rx_event.h index ae59486..0075247 100644 --- a/src/rx/rx_event.h +++ b/src/rx/rx_event.h @@ -43,7 +43,7 @@ extern int rxevent_RaiseEvents(struct clock *wait); extern struct rxevent *rxevent_Get(struct rxevent *event); /* Release a reference to an event */ -extern void rxevent_Put(struct rxevent *event); +extern void rxevent_Put(struct rxevent **event); /* Shutdown the event package */ extern void shutdown_rxevent(void); diff --git a/tests/rx/event-t.c b/tests/rx/event-t.c index f4ef105..3e7ab0a 100644 --- a/tests/rx/event-t.c +++ b/tests/rx/event-t.c @@ -45,7 +45,7 @@ eventSub(struct rxevent *event, void *arg, void *arg1, int arg2) struct testEvent *evrecord = arg; pthread_mutex_lock(&eventListMutex); - rxevent_Put(evrecord->event); + rxevent_Put(&evrecord->event); evrecord->event = NULL; evrecord->fired = 1; pthread_mutex_unlock(&eventListMutex); -- 1.9.4