diff --git a/NuGet.config b/NuGet.config
index 5a09f7eff9d983..1de76af40b5565 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -9,16 +9,10 @@
+
-
-
-
-
-
-
-
-
-
+
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 419ff2f1f7f411..f67b1b8b88d5eb 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -12,69 +12,69 @@
https://github.com/dotnet/wcf
7f504aabb1988e9a093c1e74d8040bd52feb2f01
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
https://github.com/dotnet/command-line-api
@@ -90,13 +90,13 @@
45dd3a73dd5b64b010c4251303b3664bb30df029
-
+
https://github.com/dotnet/emsdk
- 6fd14a46f7bc405f4ba53b1e691c76fdc6324b0b
+ 222749b48ecb0fe78f236ca9c61f6ff3b09cdc99
-
+
https://github.com/dotnet/emsdk
- 6fd14a46f7bc405f4ba53b1e691c76fdc6324b0b
+ 222749b48ecb0fe78f236ca9c61f6ff3b09cdc99
@@ -237,61 +237,61 @@
https://github.com/dotnet/runtime-assets
1ef844c35b4db6c120722d0abcc64dba0d3d0685
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
-
+
https://github.com/dotnet/llvm-project
- 0eac01ff3c4a8d1dbe6452dd2d8b75395bbf2b3d
+ 0a471ebbe6a4a9c095169dd531b825a4370f57f3
https://github.com/dotnet/runtime
@@ -354,9 +354,9 @@
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
67613417f5e1af250e6ddfba79f8f2885d8e90fb
-
+
https://github.com/dotnet/hotreload-utils
- 733b3be8cce2b6eb42a151bf95fbb05500fa40ee
+ 0dcc0d22fc7b9c4eb8c7ae571ae4213324b006a6
https://github.com/dotnet/runtime-assets
diff --git a/eng/Versions.props b/eng/Versions.props
index 01d2fa496566c5..9af1e7378d9ad7 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -1,11 +1,11 @@
- 8.0.19
+ 8.0.20
8
0
- 19
+ 20
8.0.100
7.0.20
6.0.36
@@ -110,14 +110,14 @@
8.0.0-rc.1.23406.6
8.0.0-preview.7.23325.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
6.0.0
1.1.1
@@ -198,7 +198,7 @@
8.0.0-prerelease.25270.1
8.0.0-prerelease.25270.1
8.0.0-prerelease.25270.1
- 8.0.0-alpha.0.25330.2
+ 8.0.0-alpha.0.25378.2
2.4.2
1.0.0
2.4.5
@@ -234,37 +234,37 @@
2.4.8
8.0.0-alpha.1.23527.1
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
- 8.0.19
+ 8.0.20
$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version)
1.1.87-gba258badda
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
- 16.0.5-alpha.1.24362.2
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
+ 16.0.5-alpha.1.25311.1
3.1.7
1.0.406601
diff --git a/src/coreclr/gc/gc.cpp b/src/coreclr/gc/gc.cpp
index c0086bed2f10f0..74143fc8df86de 100644
--- a/src/coreclr/gc/gc.cpp
+++ b/src/coreclr/gc/gc.cpp
@@ -41060,10 +41060,13 @@ BOOL gc_heap::card_transition (uint8_t* po, uint8_t* end, size_t card_word_end,
//dprintf(3,(" Clearing cards [%zx, %zx[ ",
dprintf(3,(" CC [%zx, %zx[ ",
(size_t)card_address(card), (size_t)po));
- clear_cards (card, card_of(po));
- n_card_set -= (card_of (po) - card);
- n_cards_cleared += (card_of (po) - card);
-
+ uint8_t* card_clearing_limit = po;
+#ifdef FEATURE_CARD_MARKING_STEALING
+ card_clearing_limit = min (limit, po);
+#endif // FEATURE_CARD_MARKING_STEALING
+ clear_cards (card, card_of (card_clearing_limit));
+ n_card_set -= (card_of (card_clearing_limit) - card);
+ n_cards_cleared += (card_of (card_clearing_limit) - card);
}
n_eph +=cg_pointers_found;
cg_pointers_found = 0;
diff --git a/src/coreclr/pal/src/thread/process.cpp b/src/coreclr/pal/src/thread/process.cpp
index f9f2703cf4b23d..582f6cedc2dc7c 100644
--- a/src/coreclr/pal/src/thread/process.cpp
+++ b/src/coreclr/pal/src/thread/process.cpp
@@ -103,6 +103,9 @@ extern "C"
} \
} while (false)
+// On macOS 26, sem_open fails if debugger and debugee are signed with different team ids.
+// Use fifos instead of semaphores to avoid this issue, https://github.com/dotnet/runtime/issues/116545
+#define ENABLE_RUNTIME_EVENTS_OVER_PIPES
#endif // __APPLE__
#ifdef __NetBSD__
@@ -1430,21 +1433,217 @@ static uint64_t HashSemaphoreName(uint64_t a, uint64_t b)
static const char *const TwoWayNamedPipePrefix = "clr-debug-pipe";
static const char* IpcNameFormat = "%s-%d-%llu-%s";
-/*++
- PAL_NotifyRuntimeStarted
+#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES
+static const char* RuntimeStartupPipeName = "st";
+static const char* RuntimeContinuePipeName = "co";
- Signals the debugger waiting for runtime startup notification to continue and
- waits until the debugger signals us to continue.
+#define PIPE_OPEN_RETRY_DELAY_NS 500000000 // 500 ms
-Parameters:
- None
+typedef enum
+{
+ RuntimeEventsOverPipes_Disabled = 0,
+ RuntimeEventsOverPipes_Succeeded = 1,
+ RuntimeEventsOverPipes_Failed = 2,
+} RuntimeEventsOverPipes;
-Return value:
- TRUE - successfully launched by debugger, FALSE - not launched or some failure in the handshake
---*/
+typedef enum
+{
+ RuntimeEvent_Unknown = 0,
+ RuntimeEvent_Started = 1,
+ RuntimeEvent_Continue = 2,
+} RuntimeEvent;
+
+static
+int
+OpenPipe(const char* name, int mode)
+{
+ int fd = -1;
+ int flags = mode | O_NONBLOCK;
+
+#if defined(FD_CLOEXEC)
+ flags |= O_CLOEXEC;
+#endif
+
+ while (fd == -1)
+ {
+ fd = open(name, flags);
+ if (fd == -1)
+ {
+ if (mode == O_WRONLY && errno == ENXIO)
+ {
+ PAL_nanosleep(PIPE_OPEN_RETRY_DELAY_NS);
+ continue;
+ }
+ else if (errno == EINTR)
+ {
+ continue;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ if (fd != -1)
+ {
+ flags = fcntl(fd, F_GETFL);
+ if (flags != -1)
+ {
+ flags &= ~O_NONBLOCK;
+ if (fcntl(fd, F_SETFL, flags) == -1)
+ {
+ close(fd);
+ fd = -1;
+ }
+ }
+ else
+ {
+ close(fd);
+ fd = -1;
+ }
+ }
+
+ return fd;
+}
+
+static
+void
+ClosePipe(int fd)
+{
+ if (fd != -1)
+ {
+ while (close(fd) < 0 && errno == EINTR);
+ }
+}
+
+static
+RuntimeEventsOverPipes
+NotifyRuntimeUsingPipes()
+{
+ RuntimeEventsOverPipes result = RuntimeEventsOverPipes_Disabled;
+ char startupPipeName[MAX_DEBUGGER_TRANSPORT_PIPE_NAME_LENGTH];
+ char continuePipeName[MAX_DEBUGGER_TRANSPORT_PIPE_NAME_LENGTH];
+ int startupPipeFd = -1;
+ int continuePipeFd = -1;
+ size_t offset = 0;
+
+ LPCSTR applicationGroupId = PAL_GetApplicationGroupId();
+
+ PAL_GetTransportPipeName(continuePipeName, gPID, applicationGroupId, RuntimeContinuePipeName);
+ TRACE("NotifyRuntimeUsingPipes: opening continue '%s' pipe\n", continuePipeName);
+
+ continuePipeFd = OpenPipe(continuePipeName, O_RDONLY);
+ if (continuePipeFd == -1)
+ {
+ if (errno == ENOENT || errno == EACCES)
+ {
+ TRACE("NotifyRuntimeUsingPipes: pipe %s not found/accessible, runtime events over pipes disabled\n", continuePipeName);
+ }
+ else
+ {
+ TRACE("NotifyRuntimeUsingPipes: open(%s) failed: %d (%s)\n", continuePipeName, errno, strerror(errno));
+ result = RuntimeEventsOverPipes_Failed;
+ }
+
+ goto exit;
+ }
+
+ PAL_GetTransportPipeName(startupPipeName, gPID, applicationGroupId, RuntimeStartupPipeName);
+ TRACE("NotifyRuntimeUsingPipes: opening startup '%s' pipe\n", startupPipeName);
+
+ startupPipeFd = OpenPipe(startupPipeName, O_WRONLY);
+ if (startupPipeFd == -1)
+ {
+ if (errno == ENOENT || errno == EACCES)
+ {
+ TRACE("NotifyRuntimeUsingPipes: pipe %s not found/accessible, runtime events over pipes disabled\n", startupPipeName);
+ }
+ else
+ {
+ TRACE("NotifyRuntimeUsingPipes: open(%s) failed: %d (%s)\n", startupPipeName, errno, strerror(errno));
+ result = RuntimeEventsOverPipes_Failed;
+ }
+
+ goto exit;
+ }
+
+ TRACE("NotifyRuntimeUsingPipes: sending started event\n");
+
+ {
+ unsigned char event = (unsigned char)RuntimeEvent_Started;
+ unsigned char *buffer = &event;
+ int bytesToWrite = sizeof(event);
+ int bytesWritten = 0;
+
+ do
+ {
+ bytesWritten = write(startupPipeFd, buffer + offset, bytesToWrite - offset);
+ if (bytesWritten > 0)
+ {
+ offset += bytesWritten;
+ }
+ }
+ while ((bytesWritten > 0 && offset < bytesToWrite) || (bytesWritten == -1 && errno == EINTR));
+
+ if (offset != bytesToWrite)
+ {
+ TRACE("NotifyRuntimeUsingPipes: write(%s) failed: %d (%s)\n", startupPipeName, errno, strerror(errno));
+ goto exit;
+ }
+ }
+
+ TRACE("NotifyRuntimeUsingPipes: waiting on continue event\n");
+
+ {
+ unsigned char event = (unsigned char)RuntimeEvent_Unknown;
+ unsigned char *buffer = &event;
+ int bytesToRead = sizeof(event);
+ int bytesRead = 0;
+
+ offset = 0;
+ do
+ {
+ bytesRead = read(continuePipeFd, buffer + offset, bytesToRead - offset);
+ if (bytesRead > 0)
+ {
+ offset += bytesRead;
+ }
+ }
+ while ((bytesRead > 0 && offset < bytesToRead) || (bytesRead == -1 && errno == EINTR));
+
+ if (offset == bytesToRead && event == (unsigned char)RuntimeEvent_Continue)
+ {
+ TRACE("NotifyRuntimeUsingPipes: received continue event\n");
+ }
+ else
+ {
+ TRACE("NotifyRuntimeUsingPipes: received invalid event\n");
+ goto exit;
+ }
+ }
+
+ result = RuntimeEventsOverPipes_Succeeded;
+
+exit:
+
+ if (startupPipeFd != -1)
+ {
+ ClosePipe(startupPipeFd);
+ }
+
+ if (continuePipeFd != -1)
+ {
+ ClosePipe(continuePipeFd);
+ }
+
+ return result;
+}
+#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES
+
+static
BOOL
-PALAPI
-PAL_NotifyRuntimeStarted()
+NotifyRuntimeUsingSemaphores()
{
char startupSemName[CLR_SEM_MAX_NAMELEN];
char continueSemName[CLR_SEM_MAX_NAMELEN];
@@ -1465,13 +1664,13 @@ PAL_NotifyRuntimeStarted()
CreateSemaphoreName(startupSemName, RuntimeStartupSemaphoreName, unambiguousProcessDescriptor, applicationGroupId);
CreateSemaphoreName(continueSemName, RuntimeContinueSemaphoreName, unambiguousProcessDescriptor, applicationGroupId);
- TRACE("PAL_NotifyRuntimeStarted opening continue '%s' startup '%s'\n", continueSemName, startupSemName);
+ TRACE("NotifyRuntimeUsingSemaphores: opening continue '%s' startup '%s'\n", continueSemName, startupSemName);
// Open the debugger startup semaphore. If it doesn't exists, then we do nothing and return
startupSem = sem_open(startupSemName, 0);
if (startupSem == SEM_FAILED)
{
- TRACE("sem_open(%s) failed: %d (%s)\n", startupSemName, errno, strerror(errno));
+ TRACE("NotifyRuntimeUsingSemaphores: sem_open(%s) failed: %d (%s)\n", startupSemName, errno, strerror(errno));
goto exit;
}
@@ -1494,7 +1693,7 @@ PAL_NotifyRuntimeStarted()
{
if (EINTR == errno)
{
- TRACE("sem_wait() failed with EINTR; re-waiting");
+ TRACE("NotifyRuntimeUsingSemaphores: sem_wait() failed with EINTR; re-waiting");
continue;
}
ASSERT("sem_wait(continueSem) failed: errno is %d (%s)\n", errno, strerror(errno));
@@ -1516,6 +1715,45 @@ PAL_NotifyRuntimeStarted()
return launched;
}
+/*++
+ PAL_NotifyRuntimeStarted
+
+ Signals the debugger waiting for runtime startup notification to continue and
+ waits until the debugger signals us to continue.
+
+Parameters:
+ None
+
+Return value:
+ TRUE - successfully launched by debugger, FALSE - not launched or some failure in the handshake
+--*/
+BOOL
+PALAPI
+PAL_NotifyRuntimeStarted()
+{
+#ifdef ENABLE_RUNTIME_EVENTS_OVER_PIPES
+ // Test pipes as runtime event transport.
+ RuntimeEventsOverPipes result = NotifyRuntimeUsingPipes();
+ switch (result)
+ {
+ case RuntimeEventsOverPipes_Disabled:
+ TRACE("PAL_NotifyRuntimeStarted: pipe handshake disabled, try semaphores\n");
+ return NotifyRuntimeUsingSemaphores();
+ case RuntimeEventsOverPipes_Failed:
+ TRACE("PAL_NotifyRuntimeStarted: pipe handshake failed\n");
+ return FALSE;
+ case RuntimeEventsOverPipes_Succeeded:
+ TRACE("PAL_NotifyRuntimeStarted: pipe handshake succeeded\n");
+ return TRUE;
+ default:
+ // Unexpected result.
+ return FALSE;
+ }
+#else
+ return NotifyRuntimeUsingSemaphores();
+#endif // ENABLE_RUNTIME_EVENTS_OVER_PIPES
+}
+
LPCSTR
PALAPI
PAL_GetApplicationGroupId()
diff --git a/src/libraries/System.Runtime.InteropServices/tests/LibraryImportGenerator.Tests/CollectionMarshallingFails.cs b/src/libraries/System.Runtime.InteropServices/tests/LibraryImportGenerator.Tests/CollectionMarshallingFails.cs
index 9336f8caf8fe0e..eab34000e45490 100644
--- a/src/libraries/System.Runtime.InteropServices/tests/LibraryImportGenerator.Tests/CollectionMarshallingFails.cs
+++ b/src/libraries/System.Runtime.InteropServices/tests/LibraryImportGenerator.Tests/CollectionMarshallingFails.cs
@@ -107,7 +107,8 @@ public static partial void NegateBoolsRef2D_ClearMarshalling(
public class CollectionMarshallingFails
{
[Fact]
- public void UTFStringConversionFailures()
+ [SkipOnCI("Allocates enough memory that the OOM killer can kill the process on our Helix machines.")]
+ public void BigUTFStringConversionFailures()
{
bool threw = false;
try
diff --git a/src/libraries/System.Security.Cryptography/tests/X509Certificates/ChainTests.cs b/src/libraries/System.Security.Cryptography/tests/X509Certificates/ChainTests.cs
index 92cc1abb1b6292..200f6fdbf30916 100644
--- a/src/libraries/System.Security.Cryptography/tests/X509Certificates/ChainTests.cs
+++ b/src/libraries/System.Security.Cryptography/tests/X509Certificates/ChainTests.cs
@@ -344,6 +344,8 @@ public static void BuildChainCustomTrustStore(
chainTest.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
chainTest.ChainPolicy.ExtraStore.Add(issuerCert);
+ X509ChainStatusFlags allowedFlags = X509ChainStatusFlags.NoError;
+
switch (testArguments)
{
case BuildChainCustomTrustStoreTestArguments.TrustedIntermediateUntrustedRoot:
@@ -361,6 +363,9 @@ public static void BuildChainCustomTrustStore(
chainHolder.DisposeChainElements();
chainTest.ChainPolicy.CustomTrustStore.Remove(rootCert);
chainTest.ChainPolicy.TrustMode = X509ChainTrustMode.System;
+ chainTest.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
+ chainTest.ChainPolicy.ExtraStore.Add(rootCert);
+ allowedFlags |= X509ChainStatusFlags.UntrustedRoot;
break;
default:
throw new InvalidDataException();
@@ -368,7 +373,11 @@ public static void BuildChainCustomTrustStore(
Assert.Equal(chainBuildsSuccessfully, chainTest.Build(endCert));
Assert.Equal(3, chainTest.ChainElements.Count);
- Assert.Equal(chainFlags, chainTest.AllStatusFlags());
+
+ X509ChainStatusFlags actualFlags = chainTest.AllStatusFlags();
+ actualFlags &= ~allowedFlags;
+
+ Assert.Equal(chainFlags, actualFlags);
}
}