projects
/
bluesky.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Properly decrement inode refcounts when finishing a request.
[bluesky.git]
/
nfs3
/
rpc.c
diff --git
a/nfs3/rpc.c
b/nfs3/rpc.c
index
468c58c
..
7b73840
100644
(file)
--- a/
nfs3/rpc.c
+++ b/
nfs3/rpc.c
@@
-212,12
+212,21
@@
async_rpc_send_failure(RPCRequest *req, enum accept_stat stat)
if (req->raw_args != NULL)
g_string_free(req->raw_args, TRUE);
if (req->raw_args != NULL)
g_string_free(req->raw_args, TRUE);
+ while (req->cleanup != NULL) {
+ struct cleanup_list *c = req->cleanup;
+ req->cleanup = c->next;
+ c->func(c->arg);
+ g_free(c);
+ }
+
g_free(req);
}
void
async_rpc_send_reply(RPCRequest *req, void *result)
{
g_free(req);
}
void
async_rpc_send_reply(RPCRequest *req, void *result)
{
+ bluesky_time_hires time_end;
+
GString *str = g_string_new("");
XDR xdr_out;
xdr_string_create(&xdr_out, str, XDR_ENCODE);
GString *str = g_string_new("");
XDR xdr_out;
xdr_string_create(&xdr_out, str, XDR_ENCODE);
@@
-242,6
+251,11
@@
async_rpc_send_reply(RPCRequest *req, void *result)
async_rpc_write(req->connection, str->str, str->len);
g_io_channel_flush(req->connection->channel, NULL);
async_rpc_write(req->connection, str->str, str->len);
g_io_channel_flush(req->connection->channel, NULL);
+ time_end = bluesky_now_hires();
+
+ printf("RPC[%"PRIx32"]: time = %"PRId64" ns\n",
+ req->xid, time_end - req->time_start);
+
/* Clean up. */
g_string_free(str, TRUE);
/* Clean up. */
g_string_free(str, TRUE);
@@
-257,6
+271,13
@@
async_rpc_send_reply(RPCRequest *req, void *result)
if (req->raw_args != NULL)
g_string_free(req->raw_args, TRUE);
if (req->raw_args != NULL)
g_string_free(req->raw_args, TRUE);
+ while (req->cleanup != NULL) {
+ struct cleanup_list *c = req->cleanup;
+ req->cleanup = c->next;
+ c->func(c->arg);
+ g_free(c);
+ }
+
g_free(req);
}
g_free(req);
}
@@
-487,6
+508,7
@@
struct rpc_auth {
* and the transport should be closed. */
static gboolean async_rpc_dispatch(RPCConnection *rpc)
{
* and the transport should be closed. */
static gboolean async_rpc_dispatch(RPCConnection *rpc)
{
+ bluesky_time_hires time_start = bluesky_now_hires();
int i;
GString *msg = rpc->msgbuf;
const char *buf = msg->str;
int i;
GString *msg = rpc->msgbuf;
const char *buf = msg->str;
@@
-510,6
+532,7
@@
static gboolean async_rpc_dispatch(RPCConnection *rpc)
RPCRequest *req = g_new0(RPCRequest, 1);
req->connection = rpc;
RPCRequest *req = g_new0(RPCRequest, 1);
req->connection = rpc;
+ req->time_start = time_start;
req->xid = xid;
if (ntohl(header->prog) != NFS_PROGRAM) {
req->xid = xid;
if (ntohl(header->prog) != NFS_PROGRAM) {