mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-29 03:23:03 +01:00
99 lines
2.3 KiB
C++
99 lines
2.3 KiB
C++
/*
|
|
* PROGRAM: JRD Access Method
|
|
* MODULE: lck_proto.h
|
|
* DESCRIPTION: Prototype header file for lck.cpp
|
|
*
|
|
* The contents of this file are subject to the Interbase 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.Inprise.com/IPL.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 Original Code was created by Inprise Corporation
|
|
* and its predecessors. Portions created by Inprise Corporation are
|
|
* Copyright (C) Inprise Corporation.
|
|
*
|
|
* All Rights Reserved.
|
|
* Contributor(s): ______________________________________.
|
|
*/
|
|
|
|
#ifndef JRD_LCK_PROTO_H
|
|
#define JRD_LCK_PROTO_H
|
|
|
|
#include "../jrd/lck.h"
|
|
#include "../lock/lock_proto.h"
|
|
|
|
namespace Jrd {
|
|
enum lck_t;
|
|
}
|
|
|
|
void LCK_assert(Jrd::thread_db*, Jrd::Lock*);
|
|
bool LCK_cancel_wait(Jrd::Attachment*);
|
|
bool LCK_convert(Jrd::thread_db*, Jrd::Lock*, USHORT, SSHORT);
|
|
bool LCK_convert_opt(Jrd::thread_db*, Jrd::Lock*, USHORT);
|
|
void LCK_downgrade(Jrd::thread_db*, Jrd::Lock*);
|
|
void LCK_fini(Jrd::thread_db*, Jrd::lck_owner_t);
|
|
void LCK_init(Jrd::thread_db*, Jrd::lck_owner_t);
|
|
bool LCK_lock(Jrd::thread_db*, Jrd::Lock*, USHORT, SSHORT);
|
|
bool LCK_lock_opt(Jrd::thread_db*, Jrd::Lock*, USHORT, SSHORT);
|
|
SINT64 LCK_query_data(Jrd::thread_db*, Jrd::lck_t, USHORT);
|
|
SINT64 LCK_read_data(Jrd::thread_db*, Jrd::Lock*);
|
|
void LCK_release(Jrd::thread_db*, Jrd::Lock*);
|
|
void LCK_re_post(Jrd::thread_db*, Jrd::Lock*);
|
|
void LCK_write_data(Jrd::thread_db*, Jrd::Lock*, SINT64);
|
|
|
|
|
|
class AutoLock
|
|
{
|
|
public:
|
|
explicit AutoLock(Jrd::thread_db* tdbb, Jrd::Lock* lck = NULL)
|
|
: m_tdbb(tdbb),
|
|
m_lock(lck)
|
|
{
|
|
}
|
|
|
|
~AutoLock()
|
|
{
|
|
release();
|
|
}
|
|
|
|
void release()
|
|
{
|
|
if (m_lock)
|
|
{
|
|
if (m_lock->lck_id)
|
|
LCK_release(m_tdbb, m_lock);
|
|
delete m_lock;
|
|
m_lock = NULL;
|
|
}
|
|
}
|
|
|
|
Jrd::Lock* operator-> ()
|
|
{
|
|
return m_lock;
|
|
}
|
|
|
|
operator Jrd::Lock* ()
|
|
{
|
|
return m_lock;
|
|
}
|
|
|
|
Jrd::Lock* operator= (Jrd::Lock* lck)
|
|
{
|
|
release();
|
|
m_lock = lck;
|
|
return m_lock;
|
|
}
|
|
|
|
private:
|
|
Jrd::thread_db* m_tdbb;
|
|
Jrd::Lock* m_lock;
|
|
};
|
|
|
|
|
|
#endif // JRD_LCK_PROTO_H
|