projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
datapath: Don't use RCU for internal dev vport.
[openvswitch]
/
lib
/
jsonrpc.c
diff --git
a/lib/jsonrpc.c
b/lib/jsonrpc.c
index a83dde9b5ae2b35f9ebc8b2a4bfa6f1940cf1f10..7c761ea0dcf5a736e59cb60ce0a4e436bc8e1be6 100644
(file)
--- a/
lib/jsonrpc.c
+++ b/
lib/jsonrpc.c
@@
-28,7
+28,6
@@
#include "list.h"
#include "ofpbuf.h"
#include "poll-loop.h"
#include "list.h"
#include "ofpbuf.h"
#include "poll-loop.h"
-#include "queue.h"
#include "reconnect.h"
#include "stream.h"
#include "timeval.h"
#include "reconnect.h"
#include "stream.h"
#include "timeval.h"
@@
-47,7
+46,7
@@
struct jsonrpc {
struct jsonrpc_msg *received;
/* Output. */
struct jsonrpc_msg *received;
/* Output. */
- struct
ovs_queue output;
+ struct
list output; /* Contains "struct ofpbuf"s. */
size_t backlog;
};
size_t backlog;
};
@@
-86,7
+85,7
@@
jsonrpc_open(struct stream *stream)
rpc->name = xstrdup(stream_get_name(stream));
rpc->stream = stream;
byteq_init(&rpc->input);
rpc->name = xstrdup(stream_get_name(stream));
rpc->stream = stream;
byteq_init(&rpc->input);
-
queue
_init(&rpc->output);
+
list
_init(&rpc->output);
return rpc;
}
return rpc;
}
@@
-109,8
+108,8
@@
jsonrpc_run(struct jsonrpc *rpc)
}
stream_run(rpc->stream);
}
stream_run(rpc->stream);
- while (!
queue
_is_empty(&rpc->output)) {
- struct ofpbuf *buf =
rpc->output.head
;
+ while (!
list
_is_empty(&rpc->output)) {
+ struct ofpbuf *buf =
ofpbuf_from_list(rpc->output.next)
;
int retval;
retval = stream_send(rpc->stream, buf->data, buf->size);
int retval;
retval = stream_send(rpc->stream, buf->data, buf->size);
@@
-118,7
+117,8
@@
jsonrpc_run(struct jsonrpc *rpc)
rpc->backlog -= retval;
ofpbuf_pull(buf, retval);
if (!buf->size) {
rpc->backlog -= retval;
ofpbuf_pull(buf, retval);
if (!buf->size) {
- ofpbuf_delete(queue_pop_head(&rpc->output));
+ list_remove(&buf->list_node);
+ ofpbuf_delete(buf);
}
} else {
if (retval != -EAGAIN) {
}
} else {
if (retval != -EAGAIN) {
@@
-136,7
+136,7
@@
jsonrpc_wait(struct jsonrpc *rpc)
{
if (!rpc->status) {
stream_run_wait(rpc->stream);
{
if (!rpc->status) {
stream_run_wait(rpc->stream);
- if (!
queue
_is_empty(&rpc->output)) {
+ if (!
list
_is_empty(&rpc->output)) {
stream_send_wait(rpc->stream);
}
}
stream_send_wait(rpc->stream);
}
}
@@
-215,10
+215,10
@@
jsonrpc_send(struct jsonrpc *rpc, struct jsonrpc_msg *msg)
buf = xmalloc(sizeof *buf);
ofpbuf_use(buf, s, length);
buf->size = length;
buf = xmalloc(sizeof *buf);
ofpbuf_use(buf, s, length);
buf->size = length;
-
queue_push_tail(&rpc->output, buf
);
+
list_push_back(&rpc->output, &buf->list_node
);
rpc->backlog += length;
rpc->backlog += length;
- if (rpc->
output.n == 1
) {
+ if (rpc->
backlog == length
) {
jsonrpc_run(rpc);
}
return rpc->status;
jsonrpc_run(rpc);
}
return rpc->status;
@@
-308,7
+308,7
@@
jsonrpc_send_block(struct jsonrpc *rpc, struct jsonrpc_msg *msg)
for (;;) {
jsonrpc_run(rpc);
for (;;) {
jsonrpc_run(rpc);
- if (
queue
_is_empty(&rpc->output) || rpc->status) {
+ if (
list
_is_empty(&rpc->output) || rpc->status) {
return rpc->status;
}
jsonrpc_wait(rpc);
return rpc->status;
}
jsonrpc_wait(rpc);
@@
-412,7
+412,7
@@
jsonrpc_cleanup(struct jsonrpc *rpc)
jsonrpc_msg_destroy(rpc->received);
rpc->received = NULL;
jsonrpc_msg_destroy(rpc->received);
rpc->received = NULL;
-
queue_clear
(&rpc->output);
+
ofpbuf_list_delete
(&rpc->output);
rpc->backlog = 0;
}
\f
rpc->backlog = 0;
}
\f