Imported Upstream version 6.4.0.150
Former-commit-id: 2cf3acd45014a53dda66c13f7378a88695d3c93e
This commit is contained in:
parent
7eed0321b0
commit
345224e2bc
@ -1 +1 @@
|
||||
6b782468257356a024fa287b984ac64d02824294
|
||||
4eeeb3ab453806bf94a1e3f92727c3a5b3ffebdc
|
@ -1 +1 @@
|
||||
e7a612645939d0597ce0ed619f196c34d946f19e
|
||||
5a41cd4d1bea5ebec3323c0a8dbeba933276a231
|
16
external/corefx/src/Common/src/CoreLib/Interop/Unix/System.Native/Interop.Symlink.cs
vendored
Normal file
16
external/corefx/src/Common/src/CoreLib/Interop/Unix/System.Native/Interop.Symlink.cs
vendored
Normal 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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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";
|
||||
|
@ -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 => {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -1 +1 @@
|
||||
3dc69374874d14e90b24abf706902b0dacb2d02d
|
||||
32adec28b202ea43ee62e2376d833b1422dcfe04
|
@ -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
|
||||
|
@ -1 +1 @@
|
||||
b88932559eb4f2da6bd050f46d3adceee254994a
|
||||
78e840ae40e63ee229d424842c1b198599479976
|
@ -1 +1 @@
|
||||
7dc811cb2910173ccf4673904dd7e5460c5d6f18
|
||||
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7
|
@ -1 +1 @@
|
||||
ef14e03c57fe631cdd5684164cf97d5109e4969b
|
||||
ff3aff6636cde78c4a8c955d75cd54b44ab80af7
|
@ -1 +1 @@
|
||||
6781a46f68736ca9d37bd0cffd26461ed7693ee6
|
||||
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c
|
@ -1 +1 @@
|
||||
437080e5d51f177624a994a15c91f97091eabddd
|
||||
c8de5b2048f45959a30c316a582f09a8eea17336
|
@ -1 +1 @@
|
||||
594b0c18dbce55d3526ce440912e326927bc1f56
|
||||
ded1cacbead68b6c90b00225d6cd0116f86b9fd2
|
@ -1 +1 @@
|
||||
b73c6edff435f9860ae4ea9d298d759229f18cef
|
||||
ace51ee45521f0d46d823c686c14e4cb4a032435
|
@ -1 +1 @@
|
||||
27961e3ae25cdd54e2f8f0f06044ed9301af9f6e
|
||||
37133050404f7178b0319551cf43e14c5aa3ab52
|
@ -1 +1 @@
|
||||
b88932559eb4f2da6bd050f46d3adceee254994a
|
||||
78e840ae40e63ee229d424842c1b198599479976
|
@ -1 +1 @@
|
||||
7dc811cb2910173ccf4673904dd7e5460c5d6f18
|
||||
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7
|
@ -1 +1 @@
|
||||
ef14e03c57fe631cdd5684164cf97d5109e4969b
|
||||
ff3aff6636cde78c4a8c955d75cd54b44ab80af7
|
@ -1 +1 @@
|
||||
6781a46f68736ca9d37bd0cffd26461ed7693ee6
|
||||
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c
|
@ -1 +1 @@
|
||||
437080e5d51f177624a994a15c91f97091eabddd
|
||||
c8de5b2048f45959a30c316a582f09a8eea17336
|
@ -1 +1 @@
|
||||
594b0c18dbce55d3526ce440912e326927bc1f56
|
||||
ded1cacbead68b6c90b00225d6cd0116f86b9fd2
|
@ -1 +1 @@
|
||||
b73c6edff435f9860ae4ea9d298d759229f18cef
|
||||
ace51ee45521f0d46d823c686c14e4cb4a032435
|
@ -1 +1 @@
|
||||
75a67974bb09a6a4128e91635aa266484d2fd0b3
|
||||
07148b6591fb66cbee7fa8d5ac507561b8f13568
|
@ -1 +1 @@
|
||||
27961e3ae25cdd54e2f8f0f06044ed9301af9f6e
|
||||
37133050404f7178b0319551cf43e14c5aa3ab52
|
@ -1 +1 @@
|
||||
b88932559eb4f2da6bd050f46d3adceee254994a
|
||||
78e840ae40e63ee229d424842c1b198599479976
|
@ -1 +1 @@
|
||||
7dc811cb2910173ccf4673904dd7e5460c5d6f18
|
||||
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7
|
@ -1 +1 @@
|
||||
ef14e03c57fe631cdd5684164cf97d5109e4969b
|
||||
ff3aff6636cde78c4a8c955d75cd54b44ab80af7
|
@ -1 +1 @@
|
||||
6781a46f68736ca9d37bd0cffd26461ed7693ee6
|
||||
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c
|
@ -1 +1 @@
|
||||
437080e5d51f177624a994a15c91f97091eabddd
|
||||
c8de5b2048f45959a30c316a582f09a8eea17336
|
@ -1 +1 @@
|
||||
594b0c18dbce55d3526ce440912e326927bc1f56
|
||||
ded1cacbead68b6c90b00225d6cd0116f86b9fd2
|
@ -1 +1 @@
|
||||
b73c6edff435f9860ae4ea9d298d759229f18cef
|
||||
ace51ee45521f0d46d823c686c14e4cb4a032435
|
@ -1 +1 @@
|
||||
75a67974bb09a6a4128e91635aa266484d2fd0b3
|
||||
07148b6591fb66cbee7fa8d5ac507561b8f13568
|
@ -1 +1 @@
|
||||
27961e3ae25cdd54e2f8f0f06044ed9301af9f6e
|
||||
37133050404f7178b0319551cf43e14c5aa3ab52
|
@ -1 +1 @@
|
||||
b88932559eb4f2da6bd050f46d3adceee254994a
|
||||
78e840ae40e63ee229d424842c1b198599479976
|
@ -1 +1 @@
|
||||
7dc811cb2910173ccf4673904dd7e5460c5d6f18
|
||||
bd341c852711b054c75b8b8a5bc12abb7c7a2ce7
|
@ -1 +1 @@
|
||||
0035e46939d63d33de477ce9ba078b5073cb94f1
|
||||
07f7039f37e950a113fe04856a6fab04bad79d6b
|
@ -1 +1 @@
|
||||
6781a46f68736ca9d37bd0cffd26461ed7693ee6
|
||||
c7e807fcdf92a15876a9a6af5b8b0a5fc9ad846c
|
@ -1 +1 @@
|
||||
437080e5d51f177624a994a15c91f97091eabddd
|
||||
c8de5b2048f45959a30c316a582f09a8eea17336
|
@ -1 +1 @@
|
||||
594b0c18dbce55d3526ce440912e326927bc1f56
|
||||
ded1cacbead68b6c90b00225d6cd0116f86b9fd2
|
@ -1 +1 @@
|
||||
b73c6edff435f9860ae4ea9d298d759229f18cef
|
||||
ace51ee45521f0d46d823c686c14e4cb4a032435
|
@ -1 +1 @@
|
||||
75a67974bb09a6a4128e91635aa266484d2fd0b3
|
||||
07148b6591fb66cbee7fa8d5ac507561b8f13568
|
@ -1 +1 @@
|
||||
3066fdf968cc2edf734e56e4958c596b83586882
|
||||
635c53d2cc59d9399e170a459bc548126bafd7c4
|
@ -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
|
||||
// to CancelConnectAsync
|
||||
return new SocketException(SocketError.OperationAborted);
|
||||
return new SocketException((int)SocketError.OperationAborted);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -1 +1 @@
|
||||
006852d8be418bcd92b991ad05eff431fe206fe5
|
||||
186cf8c4065c20b4655cf1d9d1e30fa514321858
|
@ -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);
|
||||
|
@ -1 +1 @@
|
||||
#define FULL_VERSION "explicit/a5e772c"
|
||||
#define FULL_VERSION "explicit/5dc37d7"
|
||||
|
@ -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 \
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
BIN
po/mcs/de.gmo
BIN
po/mcs/de.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
07d14bd323acf209a1a45de4a4ad473c1cb74ce8
|
||||
862c6498b2beab244f051a268c2b85bc52aa064f
|
BIN
po/mcs/es.gmo
BIN
po/mcs/es.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
a903e959db468775a6acf517f30e7aaaa6cd6281
|
||||
a77bd6f1e7ead8fccf6f1700ce64e182b9529a11
|
BIN
po/mcs/ja.gmo
BIN
po/mcs/ja.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
62f4aff1f40f5482d912d170f74ec5c54544beec
|
||||
92b467e21b608386d85efb3a1564795d252f8a4a
|
@ -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"
|
||||
|
BIN
po/mcs/pt_BR.gmo
BIN
po/mcs/pt_BR.gmo
Binary file not shown.
@ -1 +1 @@
|
||||
893525c512da2479353b529d2ab88458d99c2089
|
||||
e516442cd3a79d2a6387c79117f0292ee17c9e02
|
Loading…
x
Reference in New Issue
Block a user