Hi all,
this is the final patch of my current drive on mempools-nozero (aka
convert explicit pool users to MEMPROXY_CLASS).
Build-and run-tested, big-context diff.
Thanks
--
Francesco
=== modified file 'src/DiskIO/DiskThreads/DiskThreads.h'
--- src/DiskIO/DiskThreads/DiskThreads.h 2015-08-28 14:43:37 +0000
+++ src/DiskIO/DiskThreads/DiskThreads.h 2015-10-02 10:49:07 +0000
@@ -15,6 +15,7 @@
#ifndef __DISKTHREADS_H__
#define __DISKTHREADS_H__
+#include "cbdata.h"
#include "dlink.h"
#include "mem/forward.h"
@@ -42,7 +43,7 @@
#define ASYNC_WRITE 0
#define ASYNC_READ 1
-enum _squidaio_request_type {
+enum squidaio_request_type {
_AIO_OP_NONE = 0,
_AIO_OP_OPEN,
_AIO_OP_READ,
@@ -52,29 +53,39 @@ enum _squidaio_request_type {
_AIO_OP_OPENDIR,
_AIO_OP_STAT
};
-typedef enum _squidaio_request_type squidaio_request_type;
typedef void AIOCB(int fd, void *cbdata, const char *buf, int aio_return, int aio_errno);
-struct squidaio_result_t {
+class squidaio_result_t {
+public:
+ squidaio_result_t() : aio_return(0), aio_errno(0), result_type(_AIO_OP_NONE), _data(nullptr), data(nullptr) {}
int aio_return;
int aio_errno;
- enum _squidaio_request_type result_type;
+ squidaio_request_type result_type;
void *_data; /* Internal housekeeping */
void *data; /* Available to the caller */
};
-struct squidaio_ctrl_t {
+class squidaio_ctrl_t {
+ MEMPROXY_CLASS(squidaio_ctrl_t);
+public:
+ squidaio_ctrl_t() = delete;
+ squidaio_ctrl_t(const squidaio_ctrl_t&) = delete;
+ squidaio_ctrl_t& operator=(const squidaio_ctrl_t&) = delete;
+
+ squidaio_ctrl_t(int fdesc, int op, AIOCB * cb,
+ void *cbData, char *buf = nullptr,
+ int blen = 0, FREE *bufFreeFunc = nullptr);
- struct squidaio_ctrl_t *next;
+ squidaio_ctrl_t *next;
int fd;
int operation;
AIOCB *done_handler;
void *done_handler_data;
squidaio_result_t result;
- int len;
+ int len; // length of bufp
char *bufp;
- FREE *free_func;
+ FREE *free_func; // if present, apply it to free bufp, len
dlink_node node;
};
=== modified file 'src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc'
--- src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc 2015-01-13 07:25:36 +0000
+++ src/DiskIO/DiskThreads/DiskThreadsIOStrategy.cc 2015-10-02 10:50:01 +0000
@@ -28,8 +28,6 @@ DiskThreadsIOStrategy::init(void)
if (initialised)
return;
- squidaio_ctrl_pool = memPoolCreate("aio_ctrl", sizeof(squidaio_ctrl_t));
-
initialised = true;
/*
@@ -56,10 +54,6 @@ DiskThreadsIOStrategy::done(void)
squidaio_shutdown();
- delete squidaio_ctrl_pool;
-
- squidaio_ctrl_pool = NULL;
-
initialised = false;
}
@@ -67,7 +61,6 @@ int
DiskThreadsIOStrategy::callback()
{
squidaio_result_t *resultp;
- squidaio_ctrl_t *ctrlp;
int retval = 0;
assert(initialised);
@@ -77,7 +70,7 @@ DiskThreadsIOStrategy::callback()
if ((resultp = squidaio_poll_done()) == NULL)
break;
- ctrlp = (squidaio_ctrl_t *) resultp->data;
+ squidaio_ctrl_t *ctrlp = (squidaio_ctrl_t *) resultp->data;
switch (resultp->result_type) {
@@ -144,7 +137,7 @@ DiskThreadsIOStrategy::callback()
if (ctrlp->operation == _AIO_READ)
squidaio_xfree(ctrlp->bufp, ctrlp->len);
- squidaio_ctrl_pool->freeOne(ctrlp);
+ delete ctrlp;
}
return retval;
@@ -168,8 +161,7 @@ DiskThreadsIOStrategy::sync()
}
DiskThreadsIOStrategy::DiskThreadsIOStrategy() :
- initialised(false),
- squidaio_ctrl_pool(NULL)
+ initialised(false)
{}
void
=== modified file 'src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h'
--- src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h 2015-01-13 07:25:36 +0000
+++ src/DiskIO/DiskThreads/DiskThreadsIOStrategy.h 2015-09-30 16:50:09 +0000
@@ -37,7 +37,6 @@ public:
/* Todo: add access limitations */
bool initialised;
static DiskThreadsIOStrategy Instance;
- MemAllocator *squidaio_ctrl_pool;
private:
static void aioStats(StoreEntry * sentry);
=== modified file 'src/DiskIO/DiskThreads/aiops.cc'
--- src/DiskIO/DiskThreads/aiops.cc 2015-07-15 14:23:29 +0000
+++ src/DiskIO/DiskThreads/aiops.cc 2015-10-02 09:45:13 +0000
@@ -115,8 +115,8 @@ static int squidaio_initialised = 0;
static MemAllocator *squidaio_large_bufs = NULL; /* 16K */
static MemAllocator *squidaio_medium_bufs = NULL; /* 8K */
static MemAllocator *squidaio_small_bufs = NULL; /* 4K */
-static MemAllocator *squidaio_tiny_bufs = NULL; /* 2K */
-static MemAllocator *squidaio_micro_bufs = NULL; /* 128K */
+static MemAllocator *squidaio_tiny_bufs = NULL; /* 2K */
+static MemAllocator *squidaio_micro_bufs = NULL; /* 128 bytes */
static int request_queue_len = 0;
static MemAllocator *squidaio_request_pool = NULL;
@@ -1020,3 +1020,15 @@ squidaio_stats(StoreEntry * sentry)
}
}
+squidaio_ctrl_t::squidaio_ctrl_t(int fdesc, int op, AIOCB * cb, void *cbData, char *buf, int blen, FREE *bufFreeFunc) :
+ next(nullptr),
+ fd(fdesc),
+ operation(op),
+ done_handler(cb),
+ done_handler_data(cbdataReference(cbData)),
+ len(blen),
+ bufp(buf),
+ free_func(bufFreeFunc)
+{
+ result.data = this;
+}
=== modified file 'src/DiskIO/DiskThreads/async_io.cc'
--- src/DiskIO/DiskThreads/async_io.cc 2015-01-13 07:25:36 +0000
+++ src/DiskIO/DiskThreads/async_io.cc 2015-10-02 10:49:07 +0000
@@ -13,13 +13,8 @@
#include "DiskThreadsIOStrategy.h"
#include "fde.h"
#include "Generic.h"
-#include "Store.h"
-
-/*
- * squidaio_ctrl_t uses explicit alloc()/freeOne() allocators
- * XXX: convert to MEMPROXY_CLASS() API
- */
#include "mem/Pool.h"
+#include "Store.h"
AIOCounts squidaio_counts;
@@ -34,16 +29,9 @@ dlink_list used_list;
void
aioOpen(const char *path, int oflag, mode_t mode, AIOCB * callback, void *callback_data)
{
- squidaio_ctrl_t *ctrlp;
-
assert(DiskThreadsIOStrategy::Instance.initialised);
++squidaio_counts.open_start;
- ctrlp = (squidaio_ctrl_t *)DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->alloc();
- ctrlp->fd = -2;
- ctrlp->done_handler = callback;
- ctrlp->done_handler_data = cbdataReference(callback_data);
- ctrlp->operation = _AIO_OPEN;
- ctrlp->result.data = ctrlp;
+ squidaio_ctrl_t * ctrlp = new squidaio_ctrl_t(-2, _AIO_OPEN, callback, callback_data);
squidaio_open(path, oflag, mode, &ctrlp->result);
dlinkAdd(ctrlp, &ctrlp->node, &used_list);
return;
@@ -52,17 +40,10 @@ aioOpen(const char *path, int oflag, mod
void
aioClose(int fd)
{
- squidaio_ctrl_t *ctrlp;
-
assert(DiskThreadsIOStrategy::Instance.initialised);
++squidaio_counts.close_start;
aioCancel(fd);
- ctrlp = (squidaio_ctrl_t *)DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->alloc();
- ctrlp->fd = fd;
- ctrlp->done_handler = NULL;
- ctrlp->done_handler_data = NULL;
- ctrlp->operation = _AIO_CLOSE;
- ctrlp->result.data = ctrlp;
+ squidaio_ctrl_t *ctrlp = new squidaio_ctrl_t(fd, _AIO_CLOSE, nullptr, nullptr);
squidaio_close(fd, &ctrlp->result);
dlinkAdd(ctrlp, &ctrlp->node, &used_list);
return;
@@ -71,7 +52,6 @@ aioClose(int fd)
void
aioCancel(int fd)
{
- squidaio_ctrl_t *ctrlp;
dlink_node *m, *next;
assert(DiskThreadsIOStrategy::Instance.initialised);
@@ -79,7 +59,7 @@ aioCancel(int fd)
for (m = used_list.head; m; m = next) {
next = m->next;
- ctrlp = (squidaio_ctrl_t *)m->data;
+ squidaio_ctrl_t *ctrlp = (squidaio_ctrl_t *)m->data;
if (ctrlp->fd != fd)
continue;
@@ -105,25 +85,18 @@ aioCancel(int fd)
}
dlinkDelete(m, &used_list);
- DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->freeOne(ctrlp);
+ delete ctrlp;
}
}
void
aioWrite(int fd, off_t offset, char *bufp, size_t len, AIOCB * callback, void *callback_data, FREE * free_func)
{
- squidaio_ctrl_t *ctrlp;
int seekmode;
assert(DiskThreadsIOStrategy::Instance.initialised);
++squidaio_counts.write_start;
- ctrlp = (squidaio_ctrl_t *)DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->alloc();
- ctrlp->fd = fd;
- ctrlp->done_handler = callback;
- ctrlp->done_handler_data = cbdataReference(callback_data);
- ctrlp->operation = _AIO_WRITE;
- ctrlp->bufp = bufp;
- ctrlp->free_func = free_func;
+ squidaio_ctrl_t *ctrlp = new squidaio_ctrl_t(fd, _AIO_WRITE, callback, callback_data, bufp, len, free_func);
if (offset >= 0)
seekmode = SEEK_SET;
@@ -132,7 +105,6 @@ aioWrite(int fd, off_t offset, char *buf
offset = 0;
}
- ctrlp->result.data = ctrlp;
squidaio_write(fd, bufp, len, offset, seekmode, &ctrlp->result);
dlinkAdd(ctrlp, &ctrlp->node, &used_list);
} /* aioWrite */
@@ -140,18 +112,12 @@ aioWrite(int fd, off_t offset, char *buf
void
aioRead(int fd, off_t offset, size_t len, AIOCB * callback, void *callback_data)
{
- squidaio_ctrl_t *ctrlp;
int seekmode;
assert(DiskThreadsIOStrategy::Instance.initialised);
++squidaio_counts.read_start;
- ctrlp = (squidaio_ctrl_t *)DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->alloc();
- ctrlp->fd = fd;
- ctrlp->done_handler = callback;
- ctrlp->done_handler_data = cbdataReference(callback_data);
- ctrlp->operation = _AIO_READ;
- ctrlp->len = len;
- ctrlp->bufp = (char *)squidaio_xmalloc(len);
+ squidaio_ctrl_t *ctrlp = new squidaio_ctrl_t(fd, _AIO_READ, callback, callback_data,
+ (char *)squidaio_xmalloc(len), len);
if (offset >= 0)
seekmode = SEEK_SET;
@@ -160,7 +126,6 @@ aioRead(int fd, off_t offset, size_t len
offset = 0;
}
- ctrlp->result.data = ctrlp;
squidaio_read(fd, ctrlp->bufp, len, offset, seekmode, &ctrlp->result);
dlinkAdd(ctrlp, &ctrlp->node, &used_list);
return;
@@ -170,16 +135,9 @@ void
aioStat(char *path, struct stat *sb, AIOCB * callback, void *callback_data)
{
- squidaio_ctrl_t *ctrlp;
-
assert(DiskThreadsIOStrategy::Instance.initialised);
++squidaio_counts.stat_start;
- ctrlp = (squidaio_ctrl_t *)DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->alloc();
- ctrlp->fd = -2;
- ctrlp->done_handler = callback;
- ctrlp->done_handler_data = cbdataReference(callback_data);
- ctrlp->operation = _AIO_STAT;
- ctrlp->result.data = ctrlp;
+ squidaio_ctrl_t *ctrlp = new squidaio_ctrl_t(-2, _AIO_STAT, callback, callback_data);
squidaio_stat(path, sb, &ctrlp->result);
dlinkAdd(ctrlp, &ctrlp->node, &used_list);
return;
@@ -188,15 +146,9 @@ aioStat(char *path, struct stat *sb, AIO
void
aioUnlink(const char *path, AIOCB * callback, void *callback_data)
{
- squidaio_ctrl_t *ctrlp;
assert(DiskThreadsIOStrategy::Instance.initialised);
++squidaio_counts.unlink_start;
- ctrlp = (squidaio_ctrl_t *)DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->alloc();
- ctrlp->fd = -2;
- ctrlp->done_handler = callback;
- ctrlp->done_handler_data = cbdataReference(callback_data);
- ctrlp->operation = _AIO_UNLINK;
- ctrlp->result.data = ctrlp;
+ squidaio_ctrl_t *ctrlp = new squidaio_ctrl_t(-2, _AIO_UNLINK, callback, callback_data);
squidaio_unlink(path, &ctrlp->result);
dlinkAdd(ctrlp, &ctrlp->node, &used_list);
} /* aioUnlink */
@@ -204,6 +156,6 @@ aioUnlink(const char *path, AIOCB * call
int
aioQueueSize(void)
{
- return DiskThreadsIOStrategy::Instance.squidaio_ctrl_pool->inUseCount();
+ return squidaio_ctrl_t::UseCount();
}
=== modified file 'src/mem/AllocatorProxy.h'
--- src/mem/AllocatorProxy.h 2015-09-30 14:12:55 +0000
+++ src/mem/AllocatorProxy.h 2015-09-30 16:50:09 +0000
@@ -39,6 +39,7 @@ class MemPoolMeter;
if (address) \
Pool().freeOne(address); \
} \
+ static int UseCount() { return Pool().inUseCount(); } \
private:
namespace Mem
_______________________________________________
squid-dev mailing list
[email protected]
http://lists.squid-cache.org/listinfo/squid-dev