57 lines
1.5 KiB
C#
57 lines
1.5 KiB
C#
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity - Singularity ABI
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: ContainerHandle.cs
|
||
|
//
|
||
|
// Note:
|
||
|
//
|
||
|
|
||
|
using System;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
using System.Threading;
|
||
|
using Microsoft.Singularity;
|
||
|
using Microsoft.Singularity.V1.Services;
|
||
|
|
||
|
namespace Microsoft.Singularity.V1.Threads
|
||
|
{
|
||
|
[CLSCompliant(false)]
|
||
|
public struct ContainerHandle
|
||
|
{
|
||
|
public readonly UIntPtr id;
|
||
|
|
||
|
public static readonly ContainerHandle Zero = new ContainerHandle();
|
||
|
|
||
|
internal ContainerHandle(UIntPtr id)
|
||
|
{
|
||
|
this.id = id;
|
||
|
}
|
||
|
|
||
|
[ExternalEntryPoint]
|
||
|
public static unsafe bool CreateImpl(ContainerHandle * container)
|
||
|
{
|
||
|
return Create(out *container);
|
||
|
}
|
||
|
|
||
|
public static bool Create(out ContainerHandle container)
|
||
|
{
|
||
|
container = new ContainerHandle(Thread.CurrentProcess.AllocateHandle());
|
||
|
|
||
|
Tracing.Log(Tracing.Debug, "ContainerHandle.Create(out id={0:x8})",
|
||
|
container.id);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
[ExternalEntryPoint]
|
||
|
public static void Dispose(ContainerHandle container)
|
||
|
{
|
||
|
Tracing.Log(Tracing.Debug, "ContainerHandle.Dispose(id={0:x8})",
|
||
|
container.id);
|
||
|
|
||
|
Thread.CurrentProcess.ReleaseHandle(container.id);
|
||
|
}
|
||
|
}
|
||
|
}
|