Skip to content

Commit 71da08b

Browse files
committed
Use UnixCancellationPipe in UnixTerminalWriter too.
1 parent d76fb8c commit 71da08b

File tree

4 files changed

+13
-11
lines changed

4 files changed

+13
-11
lines changed

src/core/Terminals/Unix/UnixCancellationPipe.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ namespace Vezel.Cathode.Terminals.Unix;
55
[SuppressMessage("", "CA1001")]
66
internal sealed class UnixCancellationPipe
77
{
8-
private readonly UnixVirtualTerminal _terminal;
9-
108
private readonly AnonymousPipeServerStream _server;
119

1210
private readonly AnonymousPipeClientStream _client;
1311

14-
public UnixCancellationPipe(UnixVirtualTerminal terminal)
12+
private readonly bool _write;
13+
14+
public UnixCancellationPipe(bool write)
1515
{
16-
_terminal = terminal;
1716
_server = new(PipeDirection.Out);
1817
_client = new(PipeDirection.In, _server.ClientSafePipeHandle);
18+
_write = write;
1919
}
2020

2121
public unsafe void PollWithCancellation(nuint handle, CancellationToken cancellationToken)
@@ -38,7 +38,7 @@ public unsafe void PollWithCancellation(nuint handle, CancellationToken cancella
3838

3939
using (var registration = cancellationToken.UnsafeRegister(
4040
static @this => Unsafe.As<UnixCancellationPipe>(@this!)._server.WriteByte(42), this))
41-
TerminalInterop.Poll(write: false, handles, results, count: 2);
41+
TerminalInterop.Poll(_write, handles, results, count: 2);
4242

4343
// Were we canceled?
4444
if (results[0])

src/core/Terminals/Unix/UnixTerminalReader.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ namespace Vezel.Cathode.Terminals.Unix;
44

55
internal sealed class UnixTerminalReader : NativeTerminalReader
66
{
7-
private readonly SemaphoreSlim _semaphore;
7+
private readonly UnixCancellationPipe _cancellationPipe = new(write: false);
88

9-
private readonly UnixCancellationPipe _cancellationPipe;
9+
private readonly SemaphoreSlim _semaphore;
1010

11-
public UnixTerminalReader(
12-
UnixVirtualTerminal terminal, nuint handle, UnixCancellationPipe cancellationPipe, SemaphoreSlim semaphore)
11+
public UnixTerminalReader(UnixVirtualTerminal terminal, nuint handle, SemaphoreSlim semaphore)
1312
: base(terminal, handle)
1413
{
1514
_semaphore = semaphore;
16-
_cancellationPipe = cancellationPipe;
1715
}
1816

1917
protected override unsafe int ReadPartialNative(scoped Span<byte> buffer, CancellationToken cancellationToken)

src/core/Terminals/Unix/UnixTerminalWriter.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ namespace Vezel.Cathode.Terminals.Unix;
44

55
internal sealed class UnixTerminalWriter : NativeTerminalWriter
66
{
7+
private readonly UnixCancellationPipe _cancellationPipe = new(write: true);
8+
79
private readonly SemaphoreSlim _semaphore;
810

911
public UnixTerminalWriter(UnixVirtualTerminal terminal, nuint handle, SemaphoreSlim semaphore)
@@ -23,6 +25,8 @@ protected override unsafe int WritePartialNative(scoped ReadOnlySpan<byte> buffe
2325

2426
using (_semaphore.Enter(cancellationToken))
2527
{
28+
_cancellationPipe.PollWithCancellation(Handle, cancellationToken);
29+
2630
int progress;
2731

2832
fixed (byte* p = buffer)

src/core/Terminals/Unix/UnixVirtualTerminal.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ void HandleSignal(PosixSignalContext context)
5959

6060
protected override UnixTerminalReader CreateReader(nuint handle, SemaphoreSlim semaphore)
6161
{
62-
return new(this, handle, new(this), semaphore);
62+
return new(this, handle, semaphore);
6363
}
6464

6565
protected override UnixTerminalWriter CreateWriter(nuint handle, SemaphoreSlim semaphore)

0 commit comments

Comments
 (0)