Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit b3ac26b

Browse files
committed
Merge remote-tracking branch 'upstream/develop-9.0' into merge-develop-9.0-07.10.2019
2 parents bc04612 + 08839cf commit b3ac26b

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

docs/notes/bugfix-22130.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Improve stability of breakpoint manipulation in the S/E whilst debugging

engine/src/debug.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,9 @@ void MCB_prepmessage(MCExecContext &ctxt, MCNameRef mess, uint2 line, uint2 pos,
285285
p3.setnext(&p4);
286286
p4.setvalueref_argument(p_info);
287287
}
288-
MCB_message(ctxt, mess, &p1);
288+
MCDeletedObjectsFreezePool();
289+
MCB_message(ctxt, mess, &p1);
290+
MCDeletedObjectsThawPool();
289291
if (id != 0)
290292
MCeerror->clear();
291293
if (added)

engine/src/object.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5523,6 +5523,7 @@ struct MCDeletedObjectPool
55235523
static MCDeletedObjectPool *MCsparedeletedobjectpool = nil;
55245524
static MCDeletedObjectPool *MCdeletedobjectpool = nil;
55255525
static MCDeletedObjectPool *MCrootdeletedobjectpool = nil;
5526+
static uint32_t MCdeletedobjectpoolfreezedepth = 0;
55265527

55275528
static bool MCDeletedObjectPoolCreate(MCDeletedObjectPool*& r_pool)
55285529
{
@@ -5608,8 +5609,22 @@ void MCDeletedObjectsTeardown(void)
56085609
}
56095610
}
56105611

5612+
void MCDeletedObjectsFreezePool(void)
5613+
{
5614+
MCdeletedobjectpoolfreezedepth += 1;
5615+
}
5616+
5617+
void MCDeletedObjectsThawPool(void)
5618+
{
5619+
MCdeletedobjectpoolfreezedepth -= 1;
5620+
}
5621+
56115622
void MCDeletedObjectsEnterWait(bool p_dispatching)
56125623
{
5624+
// If the current pool is frozen, do nothing
5625+
if (MCdeletedobjectpoolfreezedepth > 0)
5626+
return;
5627+
56135628
// If this isn't a dispatching wait, then no objects can be created.
56145629
if (!p_dispatching)
56155630
return;
@@ -5636,6 +5651,10 @@ void MCDeletedObjectsEnterWait(bool p_dispatching)
56365651

56375652
void MCDeletedObjectsLeaveWait(bool p_dispatching)
56385653
{
5654+
// If the current pool is frozen, do nothing
5655+
if (MCdeletedobjectpoolfreezedepth > 0)
5656+
return;
5657+
56395658
// If this isn't a dispatching wait, then no objects can be created.
56405659
if (!p_dispatching)
56415660
return;

engine/src/object.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,8 @@ struct MCExecValue;
506506
struct MCDeletedObjectPool;
507507
void MCDeletedObjectsSetup(void);
508508
void MCDeletedObjectsTeardown(void);
509+
void MCDeletedObjectsFreezePool(void);
510+
void MCDeletedObjectsThawPool(void);
509511
void MCDeletedObjectsEnterWait(bool p_dispatching);
510512
void MCDeletedObjectsLeaveWait(bool p_dispatching);
511513
void MCDeletedObjectsOnObjectCreated(MCObject *object);

0 commit comments

Comments
 (0)