Skip to content

Commit 4d61fbe

Browse files
committed
Use cross refs args directly in more places
1 parent bbd813b commit 4d61fbe

14 files changed

+57
-87
lines changed

src/coreclr/gc/env/gcenv.ee.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class GCToEEInterface
3939
// Promote refcounted handle callback
4040
static bool RefCountedHandleCallbacks(Object * pObject);
4141

42-
static void TriggerClientBridgeProcessing(size_t sccsLen, StronglyConnectedComponent* sccs, size_t ccrsLen, ComponentCrossReference* ccrs);
42+
static void TriggerClientBridgeProcessing(MarkCrossReferencesArgs* args);
4343

4444
// Sync block cache management
4545
static void SyncBlockCacheWeakPtrScan(HANDLESCANPROC scanProc, uintptr_t lp1, uintptr_t lp2);

src/coreclr/gc/env/gctoeeinterface.standalone.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ namespace standalone
4949
return ::GCToEEInterface::RefCountedHandleCallbacks(pObject);
5050
}
5151

52-
void TriggerClientBridgeProcessing(size_t sccsLen, StronglyConnectedComponent* sccs, size_t ccrsLen, ComponentCrossReference* ccrs)
52+
void TriggerClientBridgeProcessing(MarkCrossReferencesArgs* args)
5353
{
54-
return ::GCToEEInterface::TriggerClientBridgeProcessing(sccsLen, sccs, ccrsLen, ccrs);
54+
return ::GCToEEInterface::TriggerClientBridgeProcessing(args);
5555
}
5656

5757
void SyncBlockCacheWeakPtrScan(HANDLESCANPROC scanProc, uintptr_t lp1, uintptr_t lp2)

src/coreclr/gc/gcbridge.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,7 +1169,7 @@ static bool tarjan_scc_algorithm ()
11691169
return true;
11701170
}
11711171

1172-
static void build_scc_callback_data (BridgeProcessorResult *bp_res)
1172+
static MarkCrossReferencesArgs* build_scc_callback_data ()
11731173
{
11741174
ColorBucket *cur;
11751175
int j;
@@ -1279,24 +1279,19 @@ static void build_scc_callback_data (BridgeProcessorResult *bp_res)
12791279
printf("\t%ld -> %ld\n", api_xrefs[i].SourceGroupIndex, api_xrefs[i].DestinationGroupIndex);
12801280
#endif
12811281

1282-
bp_res->sccsLen = num_sccs;
1283-
bp_res->sccs = api_sccs;
1284-
bp_res->ccrsLen = xref_count;
1285-
bp_res->ccrs = api_xrefs;
1282+
return new (nothrow) MarkCrossReferencesArgs(num_sccs, api_sccs, xref_count, api_xrefs);
12861283
}
12871284

1288-
BridgeProcessorResult ProcessBridgeObjects()
1285+
MarkCrossReferencesArgs* ProcessBridgeObjects()
12891286
{
1290-
BridgeProcessorResult bp_res = { 0 };
1291-
12921287
if (!tarjan_scc_algorithm())
1293-
return bp_res;
1288+
return NULL;
12941289

1295-
build_scc_callback_data(&bp_res);
1290+
MarkCrossReferencesArgs* args = build_scc_callback_data();
12961291

12971292
reset_objects_header();
12981293

12991294
bridge_finish();
13001295

1301-
return bp_res;
1296+
return args;
13021297
}

src/coreclr/gc/gcbridge.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,8 @@
88
#include "common.h"
99
#include "gcinterface.h"
1010

11-
struct BridgeProcessorResult
12-
{
13-
int sccsLen;
14-
StronglyConnectedComponent *sccs;
15-
16-
int ccrsLen;
17-
ComponentCrossReference *ccrs;
18-
};
19-
2011
void BridgeResetData();
21-
BridgeProcessorResult ProcessBridgeObjects();
12+
MarkCrossReferencesArgs* ProcessBridgeObjects();
2213

2314
void RegisterBridgeObject(Object *object, uintptr_t context);
2415
uint8_t** GetRegisteredBridges(size_t *pNumBridges);

src/coreclr/gc/gcenv.ee.standalone.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ inline bool GCToEEInterface::RefCountedHandleCallbacks(Object * pObject)
7272
return g_theGCToCLR->RefCountedHandleCallbacks(pObject);
7373
}
7474

75-
inline void GCToEEInterface::TriggerClientBridgeProcessing(size_t sccsLen, StronglyConnectedComponent* sccs, size_t ccrsLen, ComponentCrossReference* ccrs)
75+
inline void GCToEEInterface::TriggerClientBridgeProcessing(MarkCrossReferencesArgs* args)
7676
{
7777
assert(g_theGCToCLR != nullptr);
78-
return g_theGCToCLR->TriggerClientBridgeProcessing(sccsLen, sccs, ccrsLen, ccrs);
78+
return g_theGCToCLR->TriggerClientBridgeProcessing(args);
7979
}
8080

8181
inline void GCToEEInterface::SyncBlockCacheWeakPtrScan(HANDLESCANPROC scanProc, uintptr_t lp1, uintptr_t lp2)

src/coreclr/gc/gcinterface.ee.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ class IGCToCLR {
240240
bool RefCountedHandleCallbacks(Object * pObject) PURE_VIRTUAL
241241

242242
virtual
243-
void TriggerClientBridgeProcessing(size_t sccsLen, StronglyConnectedComponent* sccs, size_t ccrsLen, ComponentCrossReference* ccrs) PURE_VIRTUAL
243+
void TriggerClientBridgeProcessing(MarkCrossReferencesArgs* args) PURE_VIRTUAL
244244

245245
// Performs a weak pointer scan of the sync block cache.
246246
virtual

src/coreclr/gc/gcinterface.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,24 @@ struct ComponentCrossReference
156156
size_t DestinationGroupIndex;
157157
};
158158

159-
struct MarkCrossReferences
159+
struct MarkCrossReferencesArgs
160160
{
161161
size_t ComponentCount;
162162
StronglyConnectedComponent* Components;
163163
size_t CrossReferenceCount;
164164
ComponentCrossReference* CrossReferences;
165+
166+
MarkCrossReferencesArgs(
167+
size_t ComponentCount,
168+
StronglyConnectedComponent* Components,
169+
size_t CrossReferenceCount,
170+
ComponentCrossReference* CrossReferences)
171+
{
172+
this->ComponentCount = ComponentCount;
173+
this->Components = Components;
174+
this->CrossReferenceCount = CrossReferenceCount;
175+
this->CrossReferences = CrossReferences;
176+
}
165177
};
166178

167179

src/coreclr/gc/objecthandle.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1624,9 +1624,12 @@ uint8_t** Ref_ScanBridgeObjects(uint32_t condemned, uint32_t maxgen, ScanContext
16241624
}
16251625

16261626
// The callee here will free the allocated memory.
1627-
BridgeProcessorResult bpResult = ProcessBridgeObjects();
1627+
MarkCrossReferencesArgs *args = ProcessBridgeObjects();
16281628

1629-
GCToEEInterface::TriggerClientBridgeProcessing(bpResult.sccsLen, bpResult.sccs, bpResult.ccrsLen, bpResult.ccrs);
1629+
if (args != NULL)
1630+
{
1631+
GCToEEInterface::TriggerClientBridgeProcessing(args);
1632+
}
16301633

16311634
return GetRegisteredBridges(numObjs);
16321635
}

src/coreclr/gc/sample/gcenv.ee.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ bool GCToEEInterface::RefCountedHandleCallbacks(Object * pObject)
164164
return false;
165165
}
166166

167-
void GCToEEInterface::TriggerClientBridgeProcessing(size_t sccsLen, StronglyConnectedComponent* sccs, size_t ccrsLen, ComponentCrossReference* ccrs)
167+
void GCToEEInterface::TriggerClientBridgeProcessing(MarkCrossReferencesArgs* args)
168168
{
169169
}
170170

src/coreclr/vm/gcenv.ee.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ bool GCToEEInterface::RefCountedHandleCallbacks(Object * pObject)
402402
return false;
403403
}
404404

405-
void GCToEEInterface::TriggerClientBridgeProcessing(size_t sccsLen, StronglyConnectedComponent* sccs, size_t ccrsLen, ComponentCrossReference* ccrs)
405+
void GCToEEInterface::TriggerClientBridgeProcessing(MarkCrossReferencesArgs* args)
406406
{
407407
CONTRACTL
408408
{
@@ -412,7 +412,7 @@ void GCToEEInterface::TriggerClientBridgeProcessing(size_t sccsLen, StronglyConn
412412
CONTRACTL_END;
413413

414414
#ifdef FEATURE_GCBRIDGE
415-
Interop::TriggerClientBridgeProcessing(sccsLen, sccs, ccrsLen, ccrs);
415+
Interop::TriggerClientBridgeProcessing(args);
416416
#endif // FEATURE_GCBRIDGE
417417
}
418418

0 commit comments

Comments
 (0)