Skip to content

Commit 3420540

Browse files
committed
Successfully compiled met.epp with hazard pointers to cache objects
1 parent c6383cb commit 3420540

29 files changed

+948
-774
lines changed

src/jrd/Function.epp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ HazardPtr<Function> Function::loadMetadata(thread_db* tdbb, USHORT id, bool nosc
175175
}
176176
}
177177

178-
Function* newFun = function.get();
178+
Function* newFun = function.unsafePointer();
179179
if (!newFun)
180180
newFun = FB_NEW_POOL(*dbb->dbb_permanent) Function(*dbb->dbb_permanent);
181181

@@ -190,7 +190,7 @@ HazardPtr<Function> Function::loadMetadata(thread_db* tdbb, USHORT id, bool nosc
190190
if (!function->existenceLock)
191191
{
192192
Lock* const lock = FB_NEW_RPT(*attachment->att_pool, 0)
193-
Lock(tdbb, sizeof(SLONG), LCK_fun_exist, function.get(), blockingAst);
193+
Lock(tdbb, sizeof(SLONG), LCK_fun_exist, function.unsafePointer(), blockingAst);
194194
function->existenceLock = lock;
195195
lock->setKey(function->getId());
196196
}
@@ -417,7 +417,7 @@ HazardPtr<Function> Function::loadMetadata(thread_db* tdbb, USHORT id, bool nosc
417417
else
418418
body.getBuffer(1)[0] = 0;
419419

420-
dbb->dbb_extManager->makeFunction(tdbb, csb, function.get(), X.RDB$ENGINE_NAME,
420+
dbb->dbb_extManager->makeFunction(tdbb, csb, function.unsafePointer(), X.RDB$ENGINE_NAME,
421421
(X.RDB$ENTRYPOINT.NULL ? "" : X.RDB$ENTRYPOINT), (char*) body.begin());
422422

423423
if (!function->fun_external)

src/jrd/HazardPtr.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,24 @@ void RefHazardObject::addRef(thread_db*)
6969
++counter;
7070
}
7171

72-
HazardBase::HazardBase(thread_db* tdbb)
73-
: hazardDelayed(tdbb->getAttachment()->att_delayed_delete)
74-
{ }
72+
HazardDelayedDelete* HazardBase::getHazardDelayed(thread_db* tdbb)
73+
{
74+
if (!tdbb)
75+
tdbb = JRD_get_thread_data();
76+
return &tdbb->getAttachment()->att_delayed_delete;
77+
}
7578

79+
HazardDelayedDelete* HazardBase::getHazardDelayed(Attachment* att)
80+
{
81+
return &att->att_delayed_delete;
82+
}
7683

7784
HazardDelayedDelete::HazardPointers* HazardDelayedDelete::HazardPointers::create(MemoryPool& p, unsigned size)
7885
{
7986
return FB_NEW_RPT(p, size) HazardPointers(size);
8087
}
8188

82-
void HazardDelayedDelete::add(void* ptr)
89+
void HazardDelayedDelete::add(Ptr ptr)
8390
{
8491
// as long as we access our own hazard pointers single relaxed load is OK
8592
HazardPointers *hp = hazardPointers.load(std::memory_order_relaxed);
@@ -111,7 +118,7 @@ void HazardDelayedDelete::add(void* ptr)
111118
hp->hpCount++;
112119
}
113120

114-
void HazardDelayedDelete::remove(void* ptr)
121+
void HazardDelayedDelete::remove(Ptr ptr)
115122
{
116123
// as long as we access our own hazard pointers single relaxed load is OK
117124
HazardPointers *hp = hazardPointers.load(std::memory_order_relaxed);
@@ -140,7 +147,7 @@ void HazardDelayedDelete::delayedDelete(HazardObject* mem, bool gc)
140147
garbageCollect(GarbageCollectMethod::GC_NORMAL);
141148
}
142149

143-
void HazardDelayedDelete::copyHazardPointers(LocalHP& local, void** from, unsigned count)
150+
void HazardDelayedDelete::copyHazardPointers(LocalHP& local, Ptr* from, unsigned count)
144151
{
145152
for (unsigned n = 0; n < count; ++n)
146153
{

0 commit comments

Comments
 (0)