X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fthreadengine.h;h=73aafe7aacf7e939ca0f087154683e3255e3e2d6;hb=ba30c383ba2bd5d12139be69fcb607b99768dd05;hp=41e3fc68612cfe42a5270187ff416cd9d6d2a653;hpb=6d03943426dcce76ba66567a9b18425a5ebb4c0c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/threadengine.h b/include/threadengine.h index 41e3fc686..73aafe7aa 100644 --- a/include/threadengine.h +++ b/include/threadengine.h @@ -1,31 +1,34 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2009 InspIRCd Development Team - * See: http://wiki.inspircd.org/Credits + * Copyright (C) 2014 Attila Molnar + * Copyright (C) 2013, 2017 Sadie Powell + * Copyright (C) 2012 Robby + * Copyright (C) 2009-2010 Daniel De Graaf + * Copyright (C) 2008 Craig Edwards * - * This program is free but copyrighted software; see - * the file COPYING for details. + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. * - * --------------------------------------------------- + * 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 General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ -#ifndef __THREADENGINE__ -#define __THREADENGINE__ + +#pragma once #include #include #include -#include "inspircd_config.h" +#include "config.h" #include "base.h" -#ifdef WINDOWS -#include "threadengines/threadengine_win32.h" -#endif - -class ThreadData; - /** Derive from this class to implement your own threaded sections of * code. Be sure to keep your code thread-safe and not prone to deadlocks * and race conditions if you MUST use threading! @@ -36,6 +39,15 @@ class CoreExport Thread /** Set to true when the thread is to exit */ bool ExitFlag; + + /** Opaque thread state managed by the ThreadEngine + */ + ThreadEngine::ThreadState state; + + /** ThreadEngine manages Thread::state + */ + friend class ThreadEngine; + protected: /** Get thread's current exit status. * (are we being asked to exit?) @@ -45,19 +57,12 @@ class CoreExport Thread return ExitFlag; } public: - /** Opaque thread state managed by threading engine - */ - ThreadData* state; - /** Set Creator to NULL at this point */ - Thread() : ExitFlag(false), state(NULL) + Thread() : ExitFlag(false) { } - /* If the thread is running, you MUST join BEFORE deletion */ - virtual ~Thread(); - /** Override this method to put your actual * threaded code here. */ @@ -106,7 +111,7 @@ class CoreExport QueuedThread : public Thread queue.Wakeup(); queue.Unlock(); } - virtual void SetExitFlag() + void SetExitFlag() CXX11_OVERRIDE { queue.Lock(); Thread::SetExitFlag(); @@ -129,11 +134,11 @@ class CoreExport SocketThread : public Thread { queue.Wait(); } + public: /** Notifies parent by making the SignalFD ready to read * No requirements on locking */ void NotifyParent(); - public: SocketThread(); virtual ~SocketThread(); /** Lock queue. @@ -155,7 +160,7 @@ class CoreExport SocketThread : public Thread queue.Wakeup(); queue.Unlock(); } - virtual void SetExitFlag() + void SetExitFlag() CXX11_OVERRIDE { queue.Lock(); Thread::SetExitFlag(); @@ -169,6 +174,3 @@ class CoreExport SocketThread : public Thread */ virtual void OnNotify() = 0; }; - -#endif -