Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
5c31cac0
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5c31cac0
编写于
1月 24, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
before writing check if the socket has been destroyed, fixes #19176
上级
1823bc0c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
14 addition
and
6 deletion
+14
-6
src/typings/node.d.ts
src/typings/node.d.ts
+3
-0
src/vs/base/parts/ipc/node/ipc.net.ts
src/vs/base/parts/ipc/node/ipc.net.ts
+7
-4
src/vs/base/parts/ipc/test/node/ipc.net.test.ts
src/vs/base/parts/ipc/test/node/ipc.net.test.ts
+4
-2
未找到文件。
src/typings/node.d.ts
浏览文件 @
5c31cac0
...
...
@@ -1239,6 +1239,9 @@ declare module "net" {
unref
():
void
;
ref
():
void
;
/** A Boolean value that indicates if the connection is destroyed or not. Once a connection is destroyed no further data can be transferred using it.*/
destroyed
:
boolean
;
remoteAddress
:
string
;
remoteFamily
:
string
;
remotePort
:
number
;
...
...
src/vs/base/parts/ipc/node/ipc.net.ts
浏览文件 @
5c31cac0
...
...
@@ -6,7 +6,6 @@
'
use strict
'
;
import
{
Socket
,
Server
as
NetServer
,
createConnection
,
createServer
}
from
'
net
'
;
import
{
Duplex
}
from
'
stream
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
Event
,
{
Emitter
,
once
,
mapEvent
}
from
'
vs/base/common/event
'
;
import
{
fromEventEmitter
}
from
'
vs/base/node/event
'
;
...
...
@@ -33,7 +32,7 @@ export class Protocol implements IMessagePassingProtocol {
readonly
onMessage
:
Event
<
any
>
=
this
.
_onMessage
.
event
;
constructor
(
private
stream
:
Duplex
)
{
constructor
(
private
_socket
:
Socket
)
{
let
chunks
=
[];
let
totalLength
=
0
;
...
...
@@ -44,7 +43,7 @@ export class Protocol implements IMessagePassingProtocol {
bodyLen
:
-
1
,
};
stream
.
on
(
'
data
'
,
(
data
:
Buffer
)
=>
{
_socket
.
on
(
'
data
'
,
(
data
:
Buffer
)
=>
{
chunks
.
push
(
data
);
totalLength
+=
data
.
length
;
...
...
@@ -139,12 +138,16 @@ export class Protocol implements IMessagePassingProtocol {
private
_writeSoon
(
header
:
Buffer
,
data
:
Buffer
):
void
{
if
(
this
.
_writeBuffer
.
add
(
header
,
data
))
{
setImmediate
(()
=>
{
// return early if socket has been destroyed in the meantime
if
(
this
.
_socket
.
destroyed
)
{
return
;
}
// we ignore the returned value from `write` because we would have to cached the data
// anyways and nodejs is already doing that for us:
// > https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback
// > However, the false return value is only advisory and the writable stream will unconditionally
// > accept and buffer chunk even if it has not not been allowed to drain.
this
.
stream
.
write
(
this
.
_writeBuffer
.
take
());
this
.
_socket
.
write
(
this
.
_writeBuffer
.
take
());
});
}
}
...
...
src/vs/base/parts/ipc/test/node/ipc.net.test.ts
浏览文件 @
5c31cac0
...
...
@@ -7,7 +7,7 @@
import
*
as
assert
from
'
assert
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
Duplex
}
from
'
stream
'
;
import
{
Socket
}
from
'
net
'
;
import
{
EventEmitter
}
from
'
events
'
;
import
{
Protocol
}
from
'
vs/base/parts/ipc/node/ipc.net
'
;
...
...
@@ -15,6 +15,8 @@ class MockDuplex extends EventEmitter {
private
_cache
:
Buffer
[]
=
[];
readonly
destroyed
=
false
;
private
_deliver
():
void
{
if
(
this
.
_cache
.
length
)
{
const
data
=
Buffer
.
concat
(
this
.
_cache
);
...
...
@@ -33,7 +35,7 @@ class MockDuplex extends EventEmitter {
suite
(
'
IPC, Socket Protocol
'
,
()
=>
{
let
stream
:
Duplex
;
let
stream
:
Socket
;
setup
(()
=>
{
stream
=
<
any
>
new
MockDuplex
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录