You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2012/11/11 16:49:11 UTC
svn commit: r1408032 - in /qpid/proton/trunk/proton-c/src:
dispatcher/dispatcher.c dispatcher/dispatcher.h driver.c messenger.c
Author: rhs
Date: Sun Nov 11 15:49:10 2012
New Revision: 1408032
URL: http://svn.apache.org/viewvc?rev=1408032&view=rev
Log:
avoid copying input stream unless necessary for defragmentation purposes
Modified:
qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c
qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h
qpid/proton/trunk/proton-c/src/driver.c
qpid/proton/trunk/proton-c/src/messenger.c
Modified: qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c?rev=1408032&r1=1408031&r2=1408032&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c (original)
+++ qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.c Sun Nov 11 15:49:10 2012
@@ -38,6 +38,7 @@ pn_dispatcher_t *pn_dispatcher(uint8_t f
disp->trace = PN_TRACE_OFF;
disp->input = pn_buffer(1024);
+ disp->fragment = 0;
disp->channel = 0;
disp->code = 0;
@@ -158,6 +159,12 @@ int pn_dispatch_frame(pn_dispatcher_t *d
ssize_t pn_dispatcher_input(pn_dispatcher_t *disp, const char *bytes, size_t available)
{
+ size_t offered = available;
+
+ if (offered == disp->fragment) {
+ return 0;
+ }
+
size_t leftover = pn_buffer_size(disp->input);
if (leftover) {
int e = pn_buffer_append(disp->input, bytes, available);
@@ -168,6 +175,7 @@ ssize_t pn_dispatcher_input(pn_dispatche
}
size_t read = 0;
+ bool fragment = false;
while (!disp->halt) {
pn_frame_t frame;
@@ -179,19 +187,34 @@ ssize_t pn_dispatcher_input(pn_dispatche
read += n;
} else {
if (leftover) {
- pn_buffer_trim(disp->input, read, 0);
+ if (read > leftover) {
+ pn_buffer_clear(disp->input);
+ fragment = true;
+ } else {
+ read = available;
+ }
} else {
- int e = pn_buffer_append(disp->input, bytes + read, available - read);
- if (e) return e;
+ if (!read) {
+ int e = pn_buffer_append(disp->input, bytes + read, available - read);
+ if (e) return e;
+ read = available;
+ } else {
+ fragment = true;
+ }
}
- read = available;
break;
}
if (!disp->batch) break;
}
- return read - leftover;
+ size_t consumed = read - leftover;
+ if (consumed && fragment) {
+ disp->fragment = offered - consumed;
+ } else {
+ disp->fragment = 0;
+ }
+ return consumed;
}
int pn_scan_args(pn_dispatcher_t *disp, const char *fmt, ...)
Modified: qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h?rev=1408032&r1=1408031&r2=1408032&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h (original)
+++ qpid/proton/trunk/proton-c/src/dispatcher/dispatcher.h Sun Nov 11 15:49:10 2012
@@ -40,6 +40,7 @@ struct pn_dispatcher_t {
uint8_t frame_type;
pn_trace_t trace;
pn_buffer_t *input;
+ size_t fragment;
uint16_t channel;
uint8_t code;
pn_data_t *args;
Modified: qpid/proton/trunk/proton-c/src/driver.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/driver.c?rev=1408032&r1=1408031&r2=1408032&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/driver.c (original)
+++ qpid/proton/trunk/proton-c/src/driver.c Sun Nov 11 15:49:10 2012
@@ -71,7 +71,7 @@ struct pn_listener_t {
void *context;
};
-#define IO_BUF_SIZE (4*1024)
+#define IO_BUF_SIZE (64*1024)
#define PN_NAME_MAX (256)
struct pn_connector_t {
Modified: qpid/proton/trunk/proton-c/src/messenger.c
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger.c?rev=1408032&r1=1408031&r2=1408032&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger.c Sun Nov 11 15:49:10 2012
@@ -912,6 +912,8 @@ static pn_status_t disp2status(pn_dispos
default:
assert(0);
}
+
+ return 0;
}
pn_status_t pn_messenger_status(pn_messenger_t *messenger, pn_tracker_t tracker)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org