Skip to content

Commit d934b8c

Browse files
[release/10.0][Android] Avoid calling membarrier on older Android versions (#119054)
* [Android] Avoid calling membarrier on older Android versions * Initialize s_helperPage on older Androids
1 parent 11e7477 commit d934b8c

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/coreclr/pal/src/thread/process.cpp

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2826,17 +2826,26 @@ InitializeFlushProcessWriteBuffers()
28262826
_ASSERTE(s_flushUsingMemBarrier == 0);
28272827

28282828
#if defined(__linux__) || HAVE_SYS_MEMBARRIER_H
2829-
// Starting with Linux kernel 4.14, process memory barriers can be generated
2830-
// using MEMBARRIER_CMD_PRIVATE_EXPEDITED.
2831-
int mask = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);
2832-
if (mask >= 0 &&
2833-
mask & MEMBARRIER_CMD_PRIVATE_EXPEDITED)
2834-
{
2835-
// Register intent to use the private expedited command.
2836-
if (membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED, 0, 0) == 0)
2829+
2830+
#ifdef TARGET_ANDROID
2831+
// Avoid calling membarrier on older Android versions where membarrier
2832+
// may be barred by seccomp causing the process to be killed.
2833+
int apiLevel = android_get_device_api_level();
2834+
if (apiLevel >= __ANDROID_API_Q__)
2835+
#endif
2836+
{
2837+
// Starting with Linux kernel 4.14, process memory barriers can be generated
2838+
// using MEMBARRIER_CMD_PRIVATE_EXPEDITED.
2839+
int mask = membarrier(MEMBARRIER_CMD_QUERY, 0, 0);
2840+
if (mask >= 0 &&
2841+
mask & MEMBARRIER_CMD_PRIVATE_EXPEDITED)
28372842
{
2838-
s_flushUsingMemBarrier = TRUE;
2839-
return TRUE;
2843+
// Register intent to use the private expedited command.
2844+
if (membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED, 0, 0) == 0)
2845+
{
2846+
s_flushUsingMemBarrier = TRUE;
2847+
return TRUE;
2848+
}
28402849
}
28412850
}
28422851
#endif

0 commit comments

Comments
 (0)