summaryrefslogtreecommitdiffhomepage
path: root/src/pty
diff options
context:
space:
mode:
Diffstat (limited to 'src/pty')
-rw-r--r--src/pty/ntapi_pty_fd.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/pty/ntapi_pty_fd.c b/src/pty/ntapi_pty_fd.c
index 7670c66..ea62874 100644
--- a/src/pty/ntapi_pty_fd.c
+++ b/src/pty/ntapi_pty_fd.c
@@ -9,6 +9,7 @@
#include <ntapi/nt_tty.h>
#include <ntapi/ntapi.h>
#include "ntapi_impl.h"
+#include "ntapi_log.h"
#include "ntapi_pty.h"
static int32_t __stdcall __ntapi_pty_open_close(
@@ -141,7 +142,22 @@ static int32_t __ntapi_pty_connect(
0,&ctx->section_size,
NT_VIEW_UNMAP,0,
NT_PAGE_READWRITE)))
- return __ntapi_pty_fail(ctx,status);
+ ctx->section_addr = 0;
+
+ /* resilience */
+ if (!ctx->section_addr) {
+ __ntapi_log_write("__ntapi_pty_connect:149\n",24);
+ if ((status = __ntapi->zw_map_view_of_section(
+ ctx->section,
+ NT_CURRENT_PROCESS_HANDLE,
+ &ctx->section_addr,
+ 0,ctx->section_size,
+ 0,&ctx->section_size,
+ NT_VIEW_UNMAP,0,
+ NT_PAGE_READWRITE)))
+ return __ntapi_pty_fail(ctx,status);
+ __ntapi_log_write("__ntapi_pty_connect:159\n",24);
+ }
/* assume conforming clients, config for single lock try */
__ntapi->tt_sync_block_init(&ctx->sync[__PTY_READ],0,0,1,0,0);