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 (ArgumentException) { }
|
||||||
catch (InvalidTimeZoneException) { }
|
catch (InvalidTimeZoneException) { }
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return new TimeZoneInfo(rawData, id, dstDisabled: true); // create a TimeZoneInfo instance from the TZif data w/o DST support
|
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 (ArgumentException) { }
|
||||||
catch (InvalidTimeZoneException) { }
|
catch (InvalidTimeZoneException) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -912,7 +912,7 @@ namespace System
|
|||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index == 0)
|
if (rulesList.Count == 0 && index < dts.Length)
|
||||||
{
|
{
|
||||||
TZifType transitionType = TZif_GetEarlyDateTransitionType(transitionTypes);
|
TZifType transitionType = TZif_GetEarlyDateTransitionType(transitionTypes);
|
||||||
DateTime endTransitionDate = dts[index];
|
DateTime endTransitionDate = dts[index];
|
||||||
@ -929,6 +929,12 @@ namespace System
|
|||||||
default(TransitionTime),
|
default(TransitionTime),
|
||||||
baseUtcDelta,
|
baseUtcDelta,
|
||||||
noDaylightTransitions: true);
|
noDaylightTransitions: true);
|
||||||
|
|
||||||
|
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
|
||||||
|
{
|
||||||
|
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
|
||||||
|
}
|
||||||
|
|
||||||
rulesList.Add(r);
|
rulesList.Add(r);
|
||||||
}
|
}
|
||||||
else if (index < dts.Length)
|
else if (index < dts.Length)
|
||||||
@ -966,6 +972,12 @@ namespace System
|
|||||||
default(TransitionTime),
|
default(TransitionTime),
|
||||||
baseUtcDelta,
|
baseUtcDelta,
|
||||||
noDaylightTransitions: true);
|
noDaylightTransitions: true);
|
||||||
|
|
||||||
|
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
|
||||||
|
{
|
||||||
|
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
|
||||||
|
}
|
||||||
|
|
||||||
rulesList.Add(r);
|
rulesList.Add(r);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -978,8 +990,14 @@ namespace System
|
|||||||
if (!string.IsNullOrEmpty(futureTransitionsPosixFormat))
|
if (!string.IsNullOrEmpty(futureTransitionsPosixFormat))
|
||||||
{
|
{
|
||||||
AdjustmentRule r = TZif_CreateAdjustmentRuleForPosixFormat(futureTransitionsPosixFormat, startTransitionDate, timeZoneBaseUtcOffset);
|
AdjustmentRule r = TZif_CreateAdjustmentRuleForPosixFormat(futureTransitionsPosixFormat, startTransitionDate, timeZoneBaseUtcOffset);
|
||||||
|
|
||||||
if (r != null)
|
if (r != null)
|
||||||
{
|
{
|
||||||
|
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
|
||||||
|
{
|
||||||
|
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
|
||||||
|
}
|
||||||
|
|
||||||
rulesList.Add(r);
|
rulesList.Add(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1000,6 +1018,12 @@ namespace System
|
|||||||
default(TransitionTime),
|
default(TransitionTime),
|
||||||
baseUtcDelta,
|
baseUtcDelta,
|
||||||
noDaylightTransitions: true);
|
noDaylightTransitions: true);
|
||||||
|
|
||||||
|
if (!IsValidAdjustmentRuleOffest(timeZoneBaseUtcOffset, r))
|
||||||
|
{
|
||||||
|
NormalizeAdjustmentRuleOffset(timeZoneBaseUtcOffset, ref r);
|
||||||
|
}
|
||||||
|
|
||||||
rulesList.Add(r);
|
rulesList.Add(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1921,12 +1921,6 @@ namespace System
|
|||||||
return result;
|
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>
|
/// <summary>
|
||||||
/// Helper function that performs all of the validation checks for the
|
/// Helper function that performs all of the validation checks for the
|
||||||
/// factory methods and deserialization callback.
|
/// factory methods and deserialization callback.
|
||||||
@ -1976,11 +1970,7 @@ namespace System
|
|||||||
throw new InvalidTimeZoneException(SR.Argument_AdjustmentRulesNoNulls);
|
throw new InvalidTimeZoneException(SR.Argument_AdjustmentRulesNoNulls);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUTURE: check to see if this rule supports Daylight Saving Time
|
if (!IsValidAdjustmentRuleOffest(baseUtcOffset, current))
|
||||||
// adjustmentRulesSupportDst = adjustmentRulesSupportDst || current.SupportsDaylightSavingTime;
|
|
||||||
// FUTURE: test baseUtcOffset + current.StandardDelta
|
|
||||||
|
|
||||||
if (UtcOffsetOutOfRange(baseUtcOffset + current.DaylightDelta))
|
|
||||||
{
|
{
|
||||||
throw new InvalidTimeZoneException(SR.ArgumentOutOfRange_UtcOffsetAndDaylightDelta);
|
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);
|
while ((ret = fcntl (ToFileDescriptor(fd), F_SETLK, &lockArgs)) < 0 && errno == EINTR);
|
||||||
return ret;
|
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);
|
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
|
END_EXTERN_C
|
||||||
|
@ -12,6 +12,32 @@ namespace System.IO
|
|||||||
{
|
{
|
||||||
internal const int DefaultBufferSize = 4096;
|
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)
|
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.
|
// 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));
|
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
|
// 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 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))
|
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)
|
private static void LinkOrCopyFile (string sourceFullPath, string destFullPath)
|
||||||
{
|
{
|
||||||
|
if (CopyDanglingSymlink(sourceFullPath, destFullPath))
|
||||||
|
return;
|
||||||
|
|
||||||
if (Interop.Sys.Link(sourceFullPath, destFullPath) >= 0)
|
if (Interop.Sys.Link(sourceFullPath, destFullPath) >= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace System.IO.Tests
|
namespace System.IO.Tests
|
||||||
{
|
{
|
||||||
@ -48,6 +49,22 @@ namespace System.IO.Tests
|
|||||||
Assert.Throws<IOException>(() => Copy(testFile, testFile));
|
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]
|
[Fact]
|
||||||
[SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "CoreFX FileStream not yet imported")]
|
[SkipOnTargetFramework(TargetFrameworkMonikers.Mono, "CoreFX FileStream not yet imported")]
|
||||||
public void NonExistentPath()
|
public void NonExistentPath()
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace System.IO.Tests
|
namespace System.IO.Tests
|
||||||
{
|
{
|
||||||
@ -174,6 +175,22 @@ namespace System.IO.Tests
|
|||||||
Assert.False(File.Exists(testFileSource.FullName));
|
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]
|
[Fact]
|
||||||
public void FileNameWithSignificantWhitespace()
|
public void FileNameWithSignificantWhitespace()
|
||||||
{
|
{
|
||||||
|
@ -41,7 +41,7 @@ static partial class Consts
|
|||||||
// Use these assembly version constants to make code more maintainable.
|
// 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 MonoCompany = "Mono development team";
|
||||||
public const string MonoProduct = "Mono Common Language Infrastructure";
|
public const string MonoProduct = "Mono Common Language Infrastructure";
|
||||||
public const string MonoCopyright = "(c) Various Mono authors";
|
public const string MonoCopyright = "(c) Various Mono authors";
|
||||||
|
@ -912,20 +912,61 @@ namespace System.Net.Sockets
|
|||||||
try {
|
try {
|
||||||
IPAddress [] addresses;
|
IPAddress [] addresses;
|
||||||
SocketAsyncResult ares;
|
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)) {
|
if (!GetCheckedIPs (e, out addresses)) {
|
||||||
//NOTE: DualMode may cause Socket's RemoteEndpoint to differ in AddressFamily from the
|
//NOTE: DualMode may cause Socket's RemoteEndpoint to differ in AddressFamily from the
|
||||||
// SocketAsyncEventArgs, but the SocketAsyncEventArgs itself is not changed
|
// 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 {
|
} else {
|
||||||
DnsEndPoint dep = (DnsEndPoint)e.RemoteEndPoint;
|
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) {
|
if (!pending) {
|
||||||
ares.CheckIfThrowDelayedException ();
|
/*
|
||||||
return false;
|
* 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) {
|
} catch (Exception exc) {
|
||||||
e.socket_async_result.Complete (exc, true);
|
e.socket_async_result.Complete (exc, true);
|
||||||
return false;
|
return false;
|
||||||
@ -1044,7 +1085,7 @@ namespace System.Net.Sockets
|
|||||||
return sockares;
|
return sockares;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BeginMConnect (SocketAsyncResult sockares)
|
static bool BeginMConnect (SocketAsyncResult sockares)
|
||||||
{
|
{
|
||||||
Exception exc = null;
|
Exception exc = null;
|
||||||
|
|
||||||
@ -1053,17 +1094,18 @@ namespace System.Net.Sockets
|
|||||||
sockares.CurrentAddress++;
|
sockares.CurrentAddress++;
|
||||||
sockares.EndPoint = new IPEndPoint (sockares.Addresses [i], sockares.Port);
|
sockares.EndPoint = new IPEndPoint (sockares.Addresses [i], sockares.Port);
|
||||||
|
|
||||||
BeginSConnect (sockares);
|
return BeginSConnect (sockares);
|
||||||
return;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
exc = e;
|
exc = e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sockares.Complete (exc, true);
|
||||||
|
return false;
|
||||||
throw exc;
|
throw exc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BeginSConnect (SocketAsyncResult sockares)
|
static bool BeginSConnect (SocketAsyncResult sockares)
|
||||||
{
|
{
|
||||||
EndPoint remoteEP = sockares.EndPoint;
|
EndPoint remoteEP = sockares.EndPoint;
|
||||||
// Bug #75154: Connect() should not succeed for .Any addresses.
|
// Bug #75154: Connect() should not succeed for .Any addresses.
|
||||||
@ -1071,14 +1113,15 @@ namespace System.Net.Sockets
|
|||||||
IPEndPoint ep = (IPEndPoint) remoteEP;
|
IPEndPoint ep = (IPEndPoint) remoteEP;
|
||||||
if (ep.Address.Equals (IPAddress.Any) || ep.Address.Equals (IPAddress.IPv6Any)) {
|
if (ep.Address.Equals (IPAddress.Any) || ep.Address.Equals (IPAddress.IPv6Any)) {
|
||||||
sockares.Complete (new SocketException ((int) SocketError.AddressNotAvailable), true);
|
sockares.Complete (new SocketException ((int) SocketError.AddressNotAvailable), true);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
sockares.EndPoint = remoteEP = sockares.socket.RemapIPEndPoint (ep);
|
sockares.EndPoint = remoteEP = sockares.socket.RemapIPEndPoint (ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sockares.socket.CanTryAddressFamily(sockares.EndPoint.AddressFamily)) {
|
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;
|
int error = 0;
|
||||||
@ -1090,8 +1133,10 @@ namespace System.Net.Sockets
|
|||||||
sockares.socket.connect_in_progress = false;
|
sockares.socket.connect_in_progress = false;
|
||||||
sockares.socket.m_Handle.Dispose ();
|
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);
|
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)
|
if (error != 0) {
|
||||||
throw new SocketException (error);
|
sockares.Complete (new SocketException (error), true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool blk = sockares.socket.is_blocking;
|
bool blk = sockares.socket.is_blocking;
|
||||||
@ -1106,7 +1151,7 @@ namespace System.Net.Sockets
|
|||||||
sockares.socket.is_connected = true;
|
sockares.socket.is_connected = true;
|
||||||
sockares.socket.is_bound = true;
|
sockares.socket.is_bound = true;
|
||||||
sockares.Complete (true);
|
sockares.Complete (true);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error != (int) SocketError.InProgress && error != (int) SocketError.WouldBlock) {
|
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_connected = false;
|
||||||
sockares.socket.is_bound = false;
|
sockares.socket.is_bound = false;
|
||||||
sockares.Complete (new SocketException (error), true);
|
sockares.Complete (new SocketException (error), true);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// continue asynch
|
// continue asynch
|
||||||
@ -1123,6 +1168,7 @@ namespace System.Net.Sockets
|
|||||||
sockares.socket.connect_in_progress = true;
|
sockares.socket.connect_in_progress = true;
|
||||||
|
|
||||||
IOSelector.Add (sockares.Handle, new IOSelectorJob (IOOperation.Write, BeginConnectCallback, sockares));
|
IOSelector.Add (sockares.Handle, new IOSelectorJob (IOOperation.Write, BeginConnectCallback, sockares));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static IOAsyncCallback BeginConnectCallback = new IOAsyncCallback (ares => {
|
static IOAsyncCallback BeginConnectCallback = new IOAsyncCallback (ares => {
|
||||||
|
@ -153,7 +153,7 @@ namespace System.Net.Sockets
|
|||||||
Socket completedSocket = socket;
|
Socket completedSocket = socket;
|
||||||
SocketOperation completedOperation = operation;
|
SocketOperation completedOperation = operation;
|
||||||
|
|
||||||
if (this.AsyncCallback != null) {
|
if (!CompletedSynchronously && AsyncCallback != null) {
|
||||||
ThreadPool.UnsafeQueueUserWorkItem(state => ((SocketAsyncResult)state).AsyncCallback((SocketAsyncResult)state), this);
|
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.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.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
|
try
|
||||||
{
|
{
|
||||||
Socket attemptSocket = null;
|
Socket attemptSocket;
|
||||||
IPAddress attemptAddress = GetNextAddress(out attemptSocket);
|
IPAddress attemptAddress = GetNextAddress(out attemptSocket);
|
||||||
|
|
||||||
if (attemptAddress == null)
|
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);
|
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)
|
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
|
// to CancelConnectAsync
|
||||||
return new SocketException(SocketError.OperationAborted);
|
return new SocketException((int)SocketError.OperationAborted);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -91,6 +91,8 @@ mono_jit_info_table_new (MonoDomain *domain)
|
|||||||
static void
|
static void
|
||||||
jit_info_table_free (MonoJitInfoTable *table, gboolean duplicate)
|
jit_info_table_free (MonoJitInfoTable *table, gboolean duplicate)
|
||||||
{
|
{
|
||||||
|
MONO_REQ_GC_UNSAFE_MODE;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
int num_chunks = table->num_chunks;
|
int num_chunks = table->num_chunks;
|
||||||
MonoDomain *domain = table->domain;
|
MonoDomain *domain = table->domain;
|
||||||
|
@ -1 +1 @@
|
|||||||
006852d8be418bcd92b991ad05eff431fe206fe5
|
186cf8c4065c20b4655cf1d9d1e30fa514321858
|
@ -65,6 +65,8 @@ conc_table_new (MonoConcGHashTable *hash, int size)
|
|||||||
static void
|
static void
|
||||||
conc_table_free (gpointer ptr)
|
conc_table_free (gpointer ptr)
|
||||||
{
|
{
|
||||||
|
MONO_REQ_GC_UNSAFE_MODE;
|
||||||
|
|
||||||
conc_table *table = (conc_table *)ptr;
|
conc_table *table = (conc_table *)ptr;
|
||||||
if (table->gc_type & MONO_HASH_KEY_GC)
|
if (table->gc_type & MONO_HASH_KEY_GC)
|
||||||
mono_gc_deregister_root ((char*)table->keys);
|
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:
|
maintainer-clean-generic:
|
||||||
@echo "This command is intended for maintainers to use"
|
@echo "This command is intended for maintainers to use"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@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:
|
@CROSS_COMPILE_TRUE@clean-local:
|
||||||
@HOST_WIN32_TRUE@clean-local:
|
@HOST_WIN32_TRUE@clean-local:
|
||||||
|
@CROSS_COMPILE_TRUE@test-local:
|
||||||
|
@HOST_WIN32_TRUE@test-local:
|
||||||
clean: clean-am
|
clean: clean-am
|
||||||
|
|
||||||
clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \
|
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_current (info));
|
||||||
g_assert (mono_thread_info_is_live (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.*/
|
/* Pump the HP queue while the thread is alive.*/
|
||||||
mono_thread_hazardous_try_free_some ();
|
mono_thread_hazardous_try_free_some ();
|
||||||
|
|
||||||
small_id = info->small_id;
|
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);
|
THREADS_DEBUG ("unregistering info %p\n", info);
|
||||||
|
|
||||||
mono_native_tls_set_value (thread_exited_key, GUINT_TO_POINTER (1));
|
mono_native_tls_set_value (thread_exited_key, GUINT_TO_POINTER (1));
|
||||||
|
@ -520,8 +520,8 @@ distclean-generic:
|
|||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
@echo "This command is intended for maintainers to use"
|
@echo "This command is intended for maintainers to use"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@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@install-exec-local:
|
||||||
|
@ENABLE_MSVC_FALSE@clean-local:
|
||||||
clean: clean-am
|
clean: clean-am
|
||||||
|
|
||||||
clean-am: clean-generic clean-libtool clean-local mostlyclean-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
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
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"
|
"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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\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