summaryrefslogtreecommitdiffstats
path: root/fbench
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2017-05-09 13:38:46 +0200
committerArne H Juul <arnej@yahoo-inc.com>2017-05-09 13:39:43 +0200
commitb9e4463fa271da00437636c578d2e949ba002239 (patch)
treeff6964d44247fde17ae41dc16d3e4d259dcc65b9 /fbench
parentbbc5b5516059b20a97a3421e729478cd22c61cdb (diff)
move _linebuf out of UrlReader again
Diffstat (limited to 'fbench')
-rw-r--r--fbench/src/fbench/client.cpp40
-rw-r--r--fbench/src/fbench/client.h1
2 files changed, 16 insertions, 25 deletions
diff --git a/fbench/src/fbench/client.cpp b/fbench/src/fbench/client.cpp
index b209f4842bd..0c3d8b15504 100644
--- a/fbench/src/fbench/client.cpp
+++ b/fbench/src/fbench/client.cpp
@@ -16,6 +16,7 @@ Client::Client(ClientArguments *args)
_reader(new FileReader()),
_output(),
_linebufsize(args->_maxLineSize),
+ _linebuf(new char[_linebufsize]),
_stop(false),
_done(false),
_thread()
@@ -26,6 +27,7 @@ Client::Client(ClientArguments *args)
Client::~Client()
{
+ delete [] _linebuf;
}
void Client::runMe(Client * me) {
@@ -37,31 +39,26 @@ class UrlReader {
FileReader &_reader;
const ClientArguments &_args;
int _restarts;
- int _linebufsize;
int _contentbufsize;
int _leftOversLen;
- char *_linebuf;
char *_contentbuf;
- char *_leftOvers;
+ const char *_leftOvers;
public:
UrlReader(FileReader& reader, const ClientArguments &args)
: _reader(reader), _args(args), _restarts(0),
- _linebufsize(args._maxLineSize),
_contentbufsize(0), _leftOversLen(0),
- _linebuf(new char[_linebufsize]),
_contentbuf(0), _leftOvers(0)
{
if (_args._usePostMode) {
- _contentbufsize = 16 * _linebufsize;
+ _contentbufsize = 16 * _args._maxLineSize;
_contentbuf = new char[_contentbufsize];
}
}
bool reset();
- int nextUrl();
+ int nextUrl(char *buf, int bufLen);
int getContent();
- char *url() const { return _linebuf; }
- char *contents() const { return _contentbuf; }
- ~UrlReader() {}
+ char *content() const { return _contentbuf; }
+ ~UrlReader() { delete [] _contentbuf; }
};
bool UrlReader::reset()
@@ -79,18 +76,12 @@ bool UrlReader::reset()
return true;
}
-int UrlReader::nextUrl()
+int UrlReader::nextUrl(char *buf, int buflen)
{
- char *buf = _linebuf;
- int buflen = _linebufsize;
if (_leftOvers) {
- if (_leftOversLen < buflen) {
- strncpy(buf, _leftOvers, _leftOversLen);
- buf[_leftOversLen] = '\0';
- } else {
- strncpy(buf, _leftOvers, buflen);
- buf[buflen-1] = '\0';
- }
+ int sz = std::min(_leftOversLen, buflen-1);
+ strncpy(buf, _leftOvers, sz);
+ buf[sz] = '\0';
_leftOvers = NULL;
return _leftOversLen;
}
@@ -185,7 +176,7 @@ Client::run()
_cycleTimer->Start();
- linelen = urlSource.nextUrl();
+ linelen = urlSource.nextUrl(_linebuf, _linebufsize);
if (linelen > 0) {
++urlNumber;
} else {
@@ -197,18 +188,17 @@ Client::run()
break;
}
if (linelen < _linebufsize) {
- char *linebuf = urlSource.url();
if (_output) {
_output->write("URL: ", strlen("URL: "));
- _output->write(linebuf, linelen);
+ _output->write(_linebuf, linelen);
_output->write("\n\n", 2);
}
if (linelen + (int)_args->_queryStringToAppend.length() < _linebufsize) {
- strcat(linebuf, _args->_queryStringToAppend.c_str());
+ strcat(_linebuf, _args->_queryStringToAppend.c_str());
}
int cLen = _args->_usePostMode ? urlSource.getContent() : 0;
_reqTimer->Start();
- auto fetch_status = _http->Fetch(linebuf, _output.get(), _args->_usePostMode, urlSource.contents(), cLen);
+ auto fetch_status = _http->Fetch(_linebuf, _output.get(), _args->_usePostMode, urlSource.content(), cLen);
_reqTimer->Stop();
_status->AddRequestStatus(fetch_status.RequestStatus());
if (fetch_status.Ok() && fetch_status.TotalHitCount() == 0)
diff --git a/fbench/src/fbench/client.h b/fbench/src/fbench/client.h
index 9a3fcfe651a..052978766ff 100644
--- a/fbench/src/fbench/client.h
+++ b/fbench/src/fbench/client.h
@@ -168,6 +168,7 @@ private:
std::unique_ptr<FileReader> _reader;
std::unique_ptr<std::ofstream> _output;
int _linebufsize;
+ char *_linebuf;
std::atomic<bool> _stop;
std::atomic<bool> _done;
std::thread _thread;