diff options
author | Hari Khalsa <hkhalsa@10gen.com> | 2014-05-16 16:40:52 -0400 |
---|---|---|
committer | Hari Khalsa <hkhalsa@10gen.com> | 2014-05-16 17:18:07 -0400 |
commit | 33e3abd0c81e2cb70f5b8159818dc1ec685d7b34 (patch) | |
tree | d44898a4963039a762868c5efca41275f2c5413c /src/mongo/db/taskqueue.h | |
parent | 26ce741fb87fb9a9b784fa1e3ea88a713b802bc6 (diff) | |
download | mongo-33e3abd0c81e2cb70f5b8159818dc1ec685d7b34.tar.gz |
SERVER-13635 remove dead code
Diffstat (limited to 'src/mongo/db/taskqueue.h')
-rw-r--r-- | src/mongo/db/taskqueue.h | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/src/mongo/db/taskqueue.h b/src/mongo/db/taskqueue.h deleted file mode 100644 index 31783ac007b..00000000000 --- a/src/mongo/db/taskqueue.h +++ /dev/null @@ -1,121 +0,0 @@ -// @file deferredinvoker.h - -/** - * Copyright (C) 2008 10gen Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - * As a special exception, the copyright holders give permission to link the - * code of portions of this program with the OpenSSL library under certain - * conditions as described in each individual source file and distribute - * linked combinations including the program with the OpenSSL library. You - * must comply with the GNU Affero General Public License in all respects for - * all of the code used other than as permitted herein. If you modify file(s) - * with this exception, you may extend this exception to your version of the - * file(s), but you are not obligated to do so. If you do not wish to do so, - * delete this exception statement from your version. If you delete this - * exception statement from all source files in the program, then also delete - * it in the license file. - */ - -#pragma once - -// if you turn this back on be sure to enable TaskQueueTest again -#if 0 - -namespace mongo { - - /** defer work items by queueing them for invocation by another thread. presumption is that - consumer thread is outside of locks more than the source thread. Additional presumption - is that several objects or micro-tasks will be queued and that having a single thread - processing them in batch is hepful as they (in the first use case) use a common data - structure that can then be in local cpu classes. - - this class is in db/ as it is dbMutex (mongomutex) specific (so far). - - using a functor instead of go() might be more elegant too, once again, would like to test any - performance differential. also worry that operator() hides things? - - MT - copyable "micro task" object we can queue - must have a static method void MT::go(const MT&) - - see DefInvoke in dbtests/ for an example. - */ - template< class MT > - class TaskQueue { - public: - TaskQueue() : _which(0), _invokeMutex("deferredinvoker") { } - - void defer(MT mt) { - // only one writer allowed. however the invoke processing below can occur concurrently with - // writes (for the most part) - DEV verify( Lock::isW() ); - - _queues[_which].push_back(mt); - } - - /** call to process deferrals. - - concurrency: handled herein. multiple threads could call invoke(), but their efforts will be - serialized. the common case is that there is a single processor calling invoke(). - - normally, you call this outside of any lock. but if you want to fully drain the queue, - call from within a read lock. for example: - { - // drain with minimal time in lock - d.invoke(); - readlock lk; - d.invoke(); - ... - } - you can also call invoke periodically to do some work and then pick up later on more. - */ - void invoke() { - mutex::scoped_lock lk2(_invokeMutex); - int toDrain = 0; - { - // flip queueing to the other queue (we are double buffered) - readlocktry lk(5); - if( !lk.got() ) - return; - toDrain = _which; - _which = _which ^ 1; - wassert( _queues[_which].empty() ); // we are in dbMutex, so it should be/stay empty til we exit dbMutex - } - - _drain( _queues[toDrain] ); - verify( _queues[toDrain].empty() ); - } - - private: - int _which; // 0 or 1 - typedef vector< MT > Queue; - Queue _queues[2]; - - // lock order when multiple locks: dbMutex, _invokeMutex - mongo::mutex _invokeMutex; - - void _drain(Queue& queue) { - unsigned oldCap = queue.capacity(); - for( typename Queue::iterator i = queue.begin(); i != queue.end(); i++ ) { - const MT& v = *i; - MT::go(v); - } - queue.clear(); - DEV verify( queue.capacity() == oldCap ); // just checking that clear() doesn't deallocate, we don't want that - } - }; - -} - -#endif |