8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-01 18:00:40 +01:00
firebird-mirror/src/common/classes/Synchronize.h

112 lines
2.5 KiB
C
Raw Normal View History

/*
*
* The contents of this file are subject to the Initial
* Developer's Public License Version 1.0 (the "License");
* you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
* http://www.ibphoenix.com/idpl.html.
*
* Software distributed under the License is distributed on
* an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for the specific
* language governing rights and limitations under the License.
*
* The contents of this file or any work derived from this file
* may not be distributed under any other license whatsoever
* without the express prior written permission of the original
* author.
*
*
* The Original Code was created by James A. Starkey for IBPhoenix.
*
* Copyright (c) 1997 - 2000, 2001, 2003 James A. Starkey
* Copyright (c) 1997 - 2000, 2001, 2003 Netfrastructure, Inc.
* All Rights Reserved.
*
2011-04-28 18:59:29 +02:00
* The Code was ported into Firebird Open Source RDBMS project by
* Vladyslav Khorsun at 2010
*
* Contributor(s):
*/
#ifndef CLASSES_SYNCHRONIZE_H
#define CLASSES_SYNCHRONIZE_H
#include "../../common/common.h"
#include "../../common/classes/SyncObject.h"
namespace Firebird {
class Synchronize
{
public:
Synchronize();
virtual ~Synchronize();
virtual void shutdown();
void wake();
bool sleep(int milliseconds);
void sleep();
protected:
bool shutdownInProgress;
bool sleeping;
volatile bool wakeup;
SINT64 waitTime;
#ifdef _WIN32
void *evnt;
#endif
#ifdef _PTHREADS
pthread_cond_t condition;
pthread_mutex_t mutex;
#endif
#ifdef SOLARIS_MT
cond_t condition;
mutex_t mutex;
#endif
};
class Sync;
class SyncObject;
class ThreadSync : public Synchronize
{
public:
ThreadSync(const char *desc);
virtual ~ThreadSync();
void init(const char *description);
static ThreadSync* findThread();
static ThreadSync* getThread(const char *desc);
2011-04-28 18:59:29 +02:00
static FB_THREAD_ID getCurrentThreadId();
const char* getWhere();
static void validateLocks();
void grantLock(SyncObject *lock);
FB_THREAD_ID threadId;
ThreadSync *nextWaiting; // next thread in sleep que (see SyncObject)
ThreadSync *prevWaiting; // previous thread in sleep que (see SyncObject)
LockType lockType; // requested lock type (see SyncObject)
volatile bool lockGranted;
Sync *lockPending;
Sync *locks;
const char *description;
protected:
static void setThread (ThreadSync *thread);
};
} // namespace Firebird
#endif // CLASSES_SYNCHRONIZE_H