Imported Upstream version 6.4.0.150

Former-commit-id: 2cf3acd45014a53dda66c13f7378a88695d3c93e
This commit is contained in:
Xamarin Public Jenkins (auto-signing) 2019-08-02 08:37:10 +00:00
parent 7eed0321b0
commit 345224e2bc
67 changed files with 352 additions and 91 deletions

View File

@ -1 +1 @@
6b782468257356a024fa287b984ac64d02824294
4eeeb3ab453806bf94a1e3f92727c3a5b3ffebdc

View File

@ -1 +1 @@
e7a612645939d0597ce0ed619f196c34d946f19e
5a41cd4d1bea5ebec3323c0a8dbeba933276a231

View File

@ -0,0 +1,16 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Win32.SafeHandles;
using System;
using System.Runtime.InteropServices;
internal static partial class Interop
{
internal static partial class Sys
{
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Symlink", SetLastError = true)]
internal static extern int Symlink(string target, string linkPath);
}
}

View File

@ -637,6 +637,7 @@ namespace System
}
catch (ArgumentException) { }
catch (InvalidTimeZoneException) { }
try
{
return new TimeZoneInfo(rawData, id, dstDisabled: true); // create a TimeZoneInfo instance from the TZif data w/o DST support
@ -644,7 +645,6 @@ namespace System
catch (ArgumentException) { }
catch (InvalidTimeZoneException) { }
}
return null;
}
@ -912,7 +912,7 @@ namespace System
index++;
}
if (index == 0)
if (rulesList.Count == 0 && index < dts.Length)
{
TZifType transitionType = TZif_GetEarlyDateTransitionType(transitionTypes);
DateTime endTransitionDate = dts[index];
@ -929,6 +929,12 @@ namespace System
default(TransitionTime),
baseUtcDelta,
noDaylightTransitions: true);
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
{
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
}
rulesList.Add(r);
}
else if (index < dts.Length)
@ -966,6 +972,12 @@ namespace System
default(TransitionTime),
baseUtcDelta,
noDaylightTransitions: true);
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
{
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
}
rulesList.Add(r);
}
else
@ -978,8 +990,14 @@ namespace System
if (!string.IsNullOrEmpty(futureTransitionsPosixFormat))
{
AdjustmentRule r = TZif_CreateAdjustmentRuleForPosixFormat(futureTransitionsPosixFormat, startTransitionDate, timeZoneBaseUtcOffset);
if (r != null)
{
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
{
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
}
rulesList.Add(r);
}
}
@ -1000,6 +1018,12 @@ namespace System
default(TransitionTime),
baseUtcDelta,
noDaylightTransitions: true);
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
{
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
}
rulesList.Add(r);
}
}

View File

@ -1921,12 +1921,6 @@ namespace System
return result;
}
/// <summary>
/// Helper function that validates the TimeSpan is within +/- 14.0 hours
/// </summary>
internal static bool UtcOffsetOutOfRange(TimeSpan offset) =>
offset.TotalHours < -14.0 || offset.TotalHours > 14.0;
/// <summary>
/// Helper function that performs all of the validation checks for the
/// factory methods and deserialization callback.
@ -1976,11 +1970,7 @@ namespace System
throw new InvalidTimeZoneException(SR.Argument_AdjustmentRulesNoNulls);
}
// FUTURE: check to see if this rule supports Daylight Saving Time
// adjustmentRulesSupportDst = adjustmentRulesSupportDst || current.SupportsDaylightSavingTime;
// FUTURE: test baseUtcOffset + current.StandardDelta
if (UtcOffsetOutOfRange(baseUtcOffset + current.DaylightDelta))
if (!IsValidAdjustmentRuleOffest(baseUtcOffset, current))
{
throw new InvalidTimeZoneException(SR.ArgumentOutOfRange_UtcOffsetAndDaylightDelta);
}
@ -1993,5 +1983,82 @@ namespace System
}
}
}
private static readonly TimeSpan MaxOffset = TimeSpan.FromHours(14.0);
private static readonly TimeSpan MinOffset = -MaxOffset;
/// <summary>
/// Helper function that validates the TimeSpan is within +/- 14.0 hours
/// </summary>
internal static bool UtcOffsetOutOfRange(TimeSpan offset) =>
offset < MinOffset || offset > MaxOffset;
private static TimeSpan GetUtcOffset(TimeSpan baseUtcOffset, AdjustmentRule adjustmentRule)
{
return baseUtcOffset
+ adjustmentRule.BaseUtcOffsetDelta
+ (adjustmentRule.HasDaylightSaving ? adjustmentRule.DaylightDelta : TimeSpan.Zero);
}
/// <summary>
/// Helper function that performs adjustment rule validation
/// </summary>
private static bool IsValidAdjustmentRuleOffest(TimeSpan baseUtcOffset, AdjustmentRule adjustmentRule)
{
TimeSpan utcOffset = GetUtcOffset(baseUtcOffset, adjustmentRule);
return !UtcOffsetOutOfRange(utcOffset);
}
/// <summary>
/// Normalize adjustment rule offset so that it is within valid range
/// This method should not be called at all but is here in case something changes in the future
/// or if really old time zones are present on the OS (no combination is known at the moment)
/// </summary>
private static void NormalizeAdjustmentRuleOffset(TimeSpan baseUtcOffset, ref AdjustmentRule adjustmentRule)
{
// Certain time zones such as:
// Time Zone start date end date offset
// -----------------------------------------------------
// America/Yakutat 0001-01-01 1867-10-18 14:41:00
// America/Yakutat 1867-10-18 1900-08-20 14:41:00
// America/Sitka 0001-01-01 1867-10-18 14:58:00
// America/Sitka 1867-10-18 1900-08-20 14:58:00
// Asia/Manila 0001-01-01 1844-12-31 -15:56:00
// Pacific/Guam 0001-01-01 1845-01-01 -14:21:00
// Pacific/Saipan 0001-01-01 1845-01-01 -14:21:00
//
// have larger offset than currently supported by framework.
// If for whatever reason we find that time zone exceeding max
// offset of 14h this function will truncate it to the max valid offset.
// Updating max offset may cause problems with interacting with SQL server
// which uses SQL DATETIMEOFFSET field type which was originally designed to be
// bit-for-bit compatible with DateTimeOffset.
TimeSpan utcOffset = GetUtcOffset(baseUtcOffset, adjustmentRule);
// utc base offset delta increment
TimeSpan adjustment = TimeSpan.Zero;
if (utcOffset > MaxOffset)
{
adjustment = MaxOffset - utcOffset;
}
else if (utcOffset < MinOffset)
{
adjustment = MinOffset - utcOffset;
}
if (adjustment != TimeSpan.Zero)
{
adjustmentRule = AdjustmentRule.CreateAdjustmentRule(
adjustmentRule.DateStart,
adjustmentRule.DateEnd,
adjustmentRule.DaylightDelta,
adjustmentRule.DaylightTransitionStart,
adjustmentRule.DaylightTransitionEnd,
adjustmentRule.BaseUtcOffsetDelta + adjustment,
adjustmentRule.NoDaylightTransitions);
}
}
}
}

View File

@ -1451,3 +1451,8 @@ int32_t SystemNative_LockFileRegion(intptr_t fd, int64_t offset, int64_t length,
while ((ret = fcntl (ToFileDescriptor(fd), F_SETLK, &lockArgs)) < 0 && errno == EINTR);
return ret;
}
int32_t SystemNative_Symlink(const char* target, const char* linkPath)
{
return symlink(target, linkPath);
}

View File

@ -750,4 +750,11 @@ DLLEXPORT int32_t SystemNative_GetPeerID(intptr_t socket, uid_t* euid);
*/
DLLEXPORT int32_t SystemNative_LockFileRegion(intptr_t fd, int64_t offset, int64_t length, int16_t lockType);
/**
* Creates a symbolic link at "linkPath", pointing at "target".
* "target" may or may not exist (dangling symbolic links are valid filesystem objects)
* Returns 0 on success; otherwise, returns -1 and errno is set.
*/
DLLEXPORT int32_t SystemNative_Symlink(const char* target, const char* linkPath);
END_EXTERN_C

View File

@ -12,6 +12,32 @@ namespace System.IO
{
internal const int DefaultBufferSize = 4096;
private static bool CopyDanglingSymlink(string sourceFullPath, string destFullPath)
{
// Check if the source is a dangling symlink. In those cases, we just want to copy the link
Interop.Sys.FileStatus ignored;
if (! (Interop.Sys.Stat(sourceFullPath, out ignored) < 0 &&
Interop.Sys.LStat(sourceFullPath, out ignored) == 0))
{
return false;
}
Interop.ErrorInfo errorInfo;
// get the target of the symlink
string linkTarget = Interop.Sys.ReadLink(sourceFullPath);
if (linkTarget == null)
{
errorInfo = Interop.Sys.GetLastErrorInfo();
throw Interop.GetExceptionForIoErrno(errorInfo, sourceFullPath);
}
if (Interop.Sys.Symlink(linkTarget, destFullPath) == 0)
return true;
errorInfo = Interop.Sys.GetLastErrorInfo();
throw Interop.GetExceptionForIoErrno(errorInfo, destFullPath);
}
public static void CopyFile(string sourceFullPath, string destFullPath, bool overwrite)
{
// The destination path may just be a directory into which the file should be copied.
@ -21,6 +47,9 @@ namespace System.IO
destFullPath = Path.Combine(destFullPath, Path.GetFileName(sourceFullPath));
}
if (CopyDanglingSymlink(sourceFullPath, destFullPath))
return;
// Copy the contents of the file from the source to the destination, creating the destination in the process
using (var src = new FileStream(sourceFullPath, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultBufferSize, FileOptions.None))
using (var dst = new FileStream(destFullPath, overwrite ? FileMode.Create : FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, DefaultBufferSize, FileOptions.None))
@ -31,6 +60,9 @@ namespace System.IO
private static void LinkOrCopyFile (string sourceFullPath, string destFullPath)
{
if (CopyDanglingSymlink(sourceFullPath, destFullPath))
return;
if (Interop.Sys.Link(sourceFullPath, destFullPath) >= 0)
return;

View File

@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using Xunit;
using System.Runtime.InteropServices;
namespace System.IO.Tests
{
@ -48,6 +49,22 @@ namespace System.IO.Tests
Assert.Throws<IOException>(() => Copy(testFile, testFile));
}
[DllImport("libc", SetLastError = true)]
private static extern int symlink(string target, string linkpath);
[Fact]
[PlatformSpecific(TestPlatforms.AnyUnix)]
public void DanglingSymlinkCopy()
{
string dangling_symlink = GetTestFileName();
string missing_target = GetTestFileName();
string dangling_symlink_new_location = GetTestFileName();
Assert.False(File.Exists(missing_target));
Assert.Equal(symlink(missing_target, dangling_symlink), 0);
Copy(dangling_symlink, dangling_symlink_new_location);
Assert.True(File.Exists(dangling_symlink_new_location)); // File.Exists returns true for dangling symlinks
}
[Fact]
[SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "CoreFX FileStream not yet imported")]
public void NonExistentPath()

View File

@ -4,6 +4,7 @@
using Xunit;
using System.Linq;
using System.Runtime.InteropServices;
namespace System.IO.Tests
{
@ -174,6 +175,22 @@ namespace System.IO.Tests
Assert.False(File.Exists(testFileSource.FullName));
}
[DllImport("libc", SetLastError = true)]
private static extern int symlink(string target, string linkpath);
[Fact]
[PlatformSpecific(TestPlatforms.AnyUnix)]
public void DanglingSymlinkMove()
{
string dangling_symlink = GetTestFileName();
string missing_target = GetTestFileName();
string dangling_symlink_new_location = GetTestFileName();
Assert.False(File.Exists(missing_target));
Assert.Equal(symlink(missing_target, dangling_symlink), 0);
Move(dangling_symlink, dangling_symlink_new_location);
Assert.True(File.Exists(dangling_symlink_new_location)); // File.Exists returns true for dangling symlinks
}
[Fact]
public void FileNameWithSignificantWhitespace()
{

View File

@ -41,7 +41,7 @@ static partial class Consts
// Use these assembly version constants to make code more maintainable.
//
public const string MonoVersion = "6.4.0.146";
public const string MonoVersion = "6.4.0.150";
public const string MonoCompany = "Mono development team";
public const string MonoProduct = "Mono Common Language Infrastructure";
public const string MonoCopyright = "(c) Various Mono authors";

View File

@ -912,20 +912,61 @@ namespace System.Net.Sockets
try {
IPAddress [] addresses;
SocketAsyncResult ares;
bool pending;
/*
* Both BeginSConnect() and BeginMConnect() now return a `bool` indicating whether or
* not an async operation is pending.
*/
if (!GetCheckedIPs (e, out addresses)) {
//NOTE: DualMode may cause Socket's RemoteEndpoint to differ in AddressFamily from the
// SocketAsyncEventArgs, but the SocketAsyncEventArgs itself is not changed
ares = (SocketAsyncResult) BeginConnect (e.RemoteEndPoint, ConnectAsyncCallback, e);
ares = new SocketAsyncResult (this, ConnectAsyncCallback, e, SocketOperation.Connect) {
EndPoint = e.RemoteEndPoint
};
pending = BeginSConnect (ares);
} else {
DnsEndPoint dep = (DnsEndPoint)e.RemoteEndPoint;
ares = (SocketAsyncResult) BeginConnect (addresses, dep.Port, ConnectAsyncCallback, e);
if (addresses == null)
throw new ArgumentNullException ("addresses");
if (addresses.Length == 0)
throw new ArgumentException ("Empty addresses list");
if (this.AddressFamily != AddressFamily.InterNetwork && this.AddressFamily != AddressFamily.InterNetworkV6)
throw new NotSupportedException ("This method is only valid for addresses in the InterNetwork or InterNetworkV6 families");
if (dep.Port <= 0 || dep.Port > 65535)
throw new ArgumentOutOfRangeException ("port", "Must be > 0 and < 65536");
ares = new SocketAsyncResult (this, ConnectAsyncCallback, e, SocketOperation.Connect) {
Addresses = addresses,
Port = dep.Port,
};
is_connected = false;
pending = BeginMConnect (ares);
}
if (ares.IsCompleted && ares.CompletedSynchronously) {
ares.CheckIfThrowDelayedException ();
return false;
if (!pending) {
/*
* On synchronous completion, the async callback will not be invoked.
*
* We need to call `EndConnect ()` here to close the socket and make sure
* that any pending exceptions are properly propagated.
*
* Note that we're not calling `e.Complete ()` (or resetting `e.in_progress`) here.
*/
e.current_socket.EndConnect (ares);
}
return pending;
} catch (SocketException exc) {
e.SocketError = exc.SocketErrorCode;
e.socket_async_result.Complete (exc, true);
return false;
} catch (Exception exc) {
e.socket_async_result.Complete (exc, true);
return false;
@ -1044,7 +1085,7 @@ namespace System.Net.Sockets
return sockares;
}
static void BeginMConnect (SocketAsyncResult sockares)
static bool BeginMConnect (SocketAsyncResult sockares)
{
Exception exc = null;
@ -1053,17 +1094,18 @@ namespace System.Net.Sockets
sockares.CurrentAddress++;
sockares.EndPoint = new IPEndPoint (sockares.Addresses [i], sockares.Port);
BeginSConnect (sockares);
return;
return BeginSConnect (sockares);
} catch (Exception e) {
exc = e;
}
}
sockares.Complete (exc, true);
return false;
throw exc;
}
static void BeginSConnect (SocketAsyncResult sockares)
static bool BeginSConnect (SocketAsyncResult sockares)
{
EndPoint remoteEP = sockares.EndPoint;
// Bug #75154: Connect() should not succeed for .Any addresses.
@ -1071,14 +1113,15 @@ namespace System.Net.Sockets
IPEndPoint ep = (IPEndPoint) remoteEP;
if (ep.Address.Equals (IPAddress.Any) || ep.Address.Equals (IPAddress.IPv6Any)) {
sockares.Complete (new SocketException ((int) SocketError.AddressNotAvailable), true);
return;
return false;
}
sockares.EndPoint = remoteEP = sockares.socket.RemapIPEndPoint (ep);
}
if (!sockares.socket.CanTryAddressFamily(sockares.EndPoint.AddressFamily)) {
throw new ArgumentException(SR.net_invalidAddressList);
sockares.Complete (new ArgumentException(SR.net_invalidAddressList), true);
return false;
}
int error = 0;
@ -1090,8 +1133,10 @@ namespace System.Net.Sockets
sockares.socket.connect_in_progress = false;
sockares.socket.m_Handle.Dispose ();
sockares.socket.m_Handle = new SafeSocketHandle (sockares.socket.Socket_internal (sockares.socket.addressFamily, sockares.socket.socketType, sockares.socket.protocolType, out error), true);
if (error != 0)
throw new SocketException (error);
if (error != 0) {
sockares.Complete (new SocketException (error), true);
return false;
}
}
bool blk = sockares.socket.is_blocking;
@ -1106,7 +1151,7 @@ namespace System.Net.Sockets
sockares.socket.is_connected = true;
sockares.socket.is_bound = true;
sockares.Complete (true);
return;
return false;
}
if (error != (int) SocketError.InProgress && error != (int) SocketError.WouldBlock) {
@ -1114,7 +1159,7 @@ namespace System.Net.Sockets
sockares.socket.is_connected = false;
sockares.socket.is_bound = false;
sockares.Complete (new SocketException (error), true);
return;
return false;
}
// continue asynch
@ -1123,6 +1168,7 @@ namespace System.Net.Sockets
sockares.socket.connect_in_progress = true;
IOSelector.Add (sockares.Handle, new IOSelectorJob (IOOperation.Write, BeginConnectCallback, sockares));
return true;
}
static IOAsyncCallback BeginConnectCallback = new IOAsyncCallback (ares => {

View File

@ -153,7 +153,7 @@ namespace System.Net.Sockets
Socket completedSocket = socket;
SocketOperation completedOperation = operation;
if (this.AsyncCallback != null) {
if (!CompletedSynchronously && AsyncCallback != null) {
ThreadPool.UnsafeQueueUserWorkItem(state => ((SocketAsyncResult)state).AsyncCallback((SocketAsyncResult)state), this);
}

View File

@ -1 +1 @@
3dc69374874d14e90b24abf706902b0dacb2d02d
32adec28b202ea43ee62e2376d833b1422dcfe04

View File

@ -29,3 +29,5 @@ corefx/DriveInfoInternal.Unix.cs
../../../external/corefx/src/Common/src/CoreLib/Interop/Unix/System.Native/Interop.GetRandomBytes.cs
../../../external/corefx/src/Common/src/CoreLib/Interop/Unix/System.Native/Interop.ReadDir.cs
../../../external/corefx/src/Common/src/CoreLib/Interop/Unix/System.Native/Interop.Symlink.cs
../../../external/corefx/src/Common/src/CoreLib/Interop/Unix/System.Native/Interop.ReadLink.cs

View File

@ -1 +1 @@
b88932559eb4f2da6bd050f46d3adceee254994a
78e840ae40e63ee229d424842c1b198599479976

View File

@ -1 +1 @@
7dc811cb2910173ccf4673904dd7e5460c5d6f18
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7

View File

@ -1 +1 @@
ef14e03c57fe631cdd5684164cf97d5109e4969b
ff3aff6636cde78c4a8c955d75cd54b44ab80af7

View File

@ -1 +1 @@
6781a46f68736ca9d37bd0cffd26461ed7693ee6
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c

View File

@ -1 +1 @@
437080e5d51f177624a994a15c91f97091eabddd
c8de5b2048f45959a30c316a582f09a8eea17336

View File

@ -1 +1 @@
594b0c18dbce55d3526ce440912e326927bc1f56
ded1cacbead68b6c90b00225d6cd0116f86b9fd2

View File

@ -1 +1 @@
b73c6edff435f9860ae4ea9d298d759229f18cef
ace51ee45521f0d46d823c686c14e4cb4a032435

View File

@ -1 +1 @@
27961e3ae25cdd54e2f8f0f06044ed9301af9f6e
37133050404f7178b0319551cf43e14c5aa3ab52

View File

@ -1 +1 @@
b88932559eb4f2da6bd050f46d3adceee254994a
78e840ae40e63ee229d424842c1b198599479976

View File

@ -1 +1 @@
7dc811cb2910173ccf4673904dd7e5460c5d6f18
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7

View File

@ -1 +1 @@
ef14e03c57fe631cdd5684164cf97d5109e4969b
ff3aff6636cde78c4a8c955d75cd54b44ab80af7

View File

@ -1 +1 @@
6781a46f68736ca9d37bd0cffd26461ed7693ee6
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c

View File

@ -1 +1 @@
437080e5d51f177624a994a15c91f97091eabddd
c8de5b2048f45959a30c316a582f09a8eea17336

View File

@ -1 +1 @@
594b0c18dbce55d3526ce440912e326927bc1f56
ded1cacbead68b6c90b00225d6cd0116f86b9fd2

View File

@ -1 +1 @@
b73c6edff435f9860ae4ea9d298d759229f18cef
ace51ee45521f0d46d823c686c14e4cb4a032435

View File

@ -1 +1 @@
75a67974bb09a6a4128e91635aa266484d2fd0b3
07148b6591fb66cbee7fa8d5ac507561b8f13568

View File

@ -1 +1 @@
27961e3ae25cdd54e2f8f0f06044ed9301af9f6e
37133050404f7178b0319551cf43e14c5aa3ab52

View File

@ -1 +1 @@
b88932559eb4f2da6bd050f46d3adceee254994a
78e840ae40e63ee229d424842c1b198599479976

View File

@ -1 +1 @@
7dc811cb2910173ccf4673904dd7e5460c5d6f18
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7

View File

@ -1 +1 @@
ef14e03c57fe631cdd5684164cf97d5109e4969b
ff3aff6636cde78c4a8c955d75cd54b44ab80af7

View File

@ -1 +1 @@
6781a46f68736ca9d37bd0cffd26461ed7693ee6
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c

View File

@ -1 +1 @@
437080e5d51f177624a994a15c91f97091eabddd
c8de5b2048f45959a30c316a582f09a8eea17336

View File

@ -1 +1 @@
594b0c18dbce55d3526ce440912e326927bc1f56
ded1cacbead68b6c90b00225d6cd0116f86b9fd2

View File

@ -1 +1 @@
b73c6edff435f9860ae4ea9d298d759229f18cef
ace51ee45521f0d46d823c686c14e4cb4a032435

View File

@ -1 +1 @@
75a67974bb09a6a4128e91635aa266484d2fd0b3
07148b6591fb66cbee7fa8d5ac507561b8f13568

View File

@ -1 +1 @@
27961e3ae25cdd54e2f8f0f06044ed9301af9f6e
37133050404f7178b0319551cf43e14c5aa3ab52

View File

@ -1 +1 @@
b88932559eb4f2da6bd050f46d3adceee254994a
78e840ae40e63ee229d424842c1b198599479976

View File

@ -1 +1 @@
7dc811cb2910173ccf4673904dd7e5460c5d6f18
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7

View File

@ -1 +1 @@
0035e46939d63d33de477ce9ba078b5073cb94f1
07f7039f37e950a113fe04856a6fab04bad79d6b

View File

@ -1 +1 @@
6781a46f68736ca9d37bd0cffd26461ed7693ee6
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c

View File

@ -1 +1 @@
437080e5d51f177624a994a15c91f97091eabddd
c8de5b2048f45959a30c316a582f09a8eea17336

View File

@ -1 +1 @@
594b0c18dbce55d3526ce440912e326927bc1f56
ded1cacbead68b6c90b00225d6cd0116f86b9fd2

View File

@ -1 +1 @@
b73c6edff435f9860ae4ea9d298d759229f18cef
ace51ee45521f0d46d823c686c14e4cb4a032435

View File

@ -1 +1 @@
75a67974bb09a6a4128e91635aa266484d2fd0b3
07148b6591fb66cbee7fa8d5ac507561b8f13568

View File

@ -1 +1 @@
3066fdf968cc2edf734e56e4958c596b83586882
635c53d2cc59d9399e170a459bc548126bafd7c4

View File

@ -219,28 +219,48 @@ namespace System.Net.Sockets
{
try
{
Socket attemptSocket = null;
Socket attemptSocket;
IPAddress attemptAddress = GetNextAddress(out attemptSocket);
if (attemptAddress == null)
{
return new SocketException(SocketError.NoData);
return new SocketException((int)SocketError.NoData);
}
GlobalLog.Assert(attemptSocket != null, "MultipleConnectAsync.AttemptConnection: attemptSocket is null!");
internalArgs.RemoteEndPoint = new IPEndPoint(attemptAddress, endPoint.Port);
if (!attemptSocket.ConnectAsync(internalArgs))
return AttemptConnection(attemptSocket, internalArgs);
}
catch (Exception e)
{
if (e is ObjectDisposedException)
{
return new SocketException(internalArgs.SocketError);
NetEventSource.Fail(this, "unexpected ObjectDisposedException");
}
return e;
}
}
private Exception AttemptConnection(Socket attemptSocket, SocketAsyncEventArgs args)
{
try
{
if (attemptSocket == null)
{
NetEventSource.Fail(null, "attemptSocket is null!");
}
bool pending = attemptSocket.ConnectAsync(args);
if (!pending)
{
InternalConnectCallback(null, args);
}
}
catch (ObjectDisposedException)
{
// This can happen if the user closes the socket, and is equivalent to a call
// This can happen if the user closes the socket, and is equivalent to a call
// to CancelConnectAsync
return new SocketException(SocketError.OperationAborted);
return new SocketException((int)SocketError.OperationAborted);
}
catch (Exception e)
{

View File

@ -91,6 +91,8 @@ mono_jit_info_table_new (MonoDomain *domain)
static void
jit_info_table_free (MonoJitInfoTable *table, gboolean duplicate)
{
MONO_REQ_GC_UNSAFE_MODE;
int i;
int num_chunks = table->num_chunks;
MonoDomain *domain = table->domain;

View File

@ -1 +1 @@
006852d8be418bcd92b991ad05eff431fe206fe5
186cf8c4065c20b4655cf1d9d1e30fa514321858

View File

@ -65,6 +65,8 @@ conc_table_new (MonoConcGHashTable *hash, int size)
static void
conc_table_free (gpointer ptr)
{
MONO_REQ_GC_UNSAFE_MODE;
conc_table *table = (conc_table *)ptr;
if (table->gc_type & MONO_HASH_KEY_GC)
mono_gc_deregister_root ((char*)table->keys);

View File

@ -1 +1 @@
#define FULL_VERSION "explicit/a5e772c"
#define FULL_VERSION "explicit/5dc37d7"

View File

@ -1491,10 +1491,10 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
@CROSS_COMPILE_TRUE@test-local:
@HOST_WIN32_TRUE@test-local:
@CROSS_COMPILE_TRUE@clean-local:
@HOST_WIN32_TRUE@clean-local:
@CROSS_COMPILE_TRUE@test-local:
@HOST_WIN32_TRUE@test-local:
clean: clean-am
clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \

View File

@ -516,15 +516,19 @@ unregister_thread (void *arg)
g_assert (mono_thread_info_is_current (info));
g_assert (mono_thread_info_is_live (info));
/* We only enter the GC unsafe region, as when exiting this function, the thread
* will be detached, and the current MonoThreadInfo* will be destroyed. */
mono_threads_enter_gc_unsafe_region_unbalanced_with_info (info, &gc_unsafe_stackdata);
/* Need to be in GC Unsafe to pump the HP queue - some of the cleanup
* methods need to use coop-aware locks. For example: jit_info_table_free_duplicate.
*/
/* Pump the HP queue while the thread is alive.*/
mono_thread_hazardous_try_free_some ();
small_id = info->small_id;
/* We only enter the GC unsafe region, as when exiting this function, the thread
* will be detached, and the current MonoThreadInfo* will be destroyed. */
mono_threads_enter_gc_unsafe_region_unbalanced_with_info (info, &gc_unsafe_stackdata);
THREADS_DEBUG ("unregistering info %p\n", info);
mono_native_tls_set_value (thread_exited_key, GUINT_TO_POINTER (1));

View File

@ -520,8 +520,8 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
@ENABLE_MSVC_FALSE@clean-local:
@ENABLE_MSVC_FALSE@install-exec-local:
@ENABLE_MSVC_FALSE@clean-local:
clean: clean-am
clean-am: clean-generic clean-libtool clean-local mostlyclean-am

Binary file not shown.

View File

@ -1 +1 @@
07d14bd323acf209a1a45de4a4ad473c1cb74ce8
862c6498b2beab244f051a268c2b85bc52aa064f

Binary file not shown.

View File

@ -1 +1 @@
a903e959db468775a6acf517f30e7aaaa6cd6281
a77bd6f1e7ead8fccf6f1700ce64e182b9529a11

Binary file not shown.

View File

@ -1 +1 @@
62f4aff1f40f5482d912d170f74ec5c54544beec
92b467e21b608386d85efb3a1564795d252f8a4a

View File

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: mono 6.4.0.146\n"
"Project-Id-Version: mono 6.4.0.150\n"
"Report-Msgid-Bugs-To: http://www.mono-project.com/Bugs\n"
"POT-Creation-Date: 2019-08-01 08:23+0000\n"
"POT-Creation-Date: 2019-08-02 08:05+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

Binary file not shown.

View File

@ -1 +1 @@
893525c512da2479353b529d2ab88458d99c2089
e516442cd3a79d2a6387c79117f0292ee17c9e02