Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9a111e7

Browse filesBrowse files
Eugene OstroukhovItalo A. Casas
authored andcommitted
inspector: no crash when WS server can't start
This change also changes error message to make it consistent with the one printed by the debugger. Fixes: #10858 PR-URL: #10878 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent 63f4302 commit 9a111e7
Copy full SHA for 9a111e7

File tree

Expand file treeCollapse file tree

5 files changed

+33
-22
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

5 files changed

+33
-22
lines changed
Open diff view settings
Collapse file

‎src/inspector_agent.cc‎

Copy file name to clipboardExpand all lines: src/inspector_agent.cc
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,9 +556,10 @@ void AgentImpl::WorkerRunIO() {
556556
}
557557
InspectorAgentDelegate delegate(this, script_path, script_name_, wait_);
558558
delegate_ = &delegate;
559-
InspectorSocketServer server(&delegate, options_.port());
559+
InspectorSocketServer server(&delegate,
560+
options_.host_name(),
561+
options_.port());
560562
if (!server.Start(&child_loop_)) {
561-
fprintf(stderr, "Unable to open devtools socket: %s\n", uv_strerror(err));
562563
state_ = State::kError; // Safe, main thread is waiting on semaphore
563564
uv_close(reinterpret_cast<uv_handle_t*>(&io_thread_req_), nullptr);
564565
uv_loop_close(&child_loop_);
Collapse file

‎src/inspector_socket_server.cc‎

Copy file name to clipboardExpand all lines: src/inspector_socket_server.cc
+15-9Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ void Escape(std::string* string) {
2424
}
2525
}
2626

27-
std::string GetWsUrl(int port, const std::string& id) {
27+
std::string GetWsUrl(const std::string& host, int port, const std::string& id) {
2828
char buf[1024];
29-
snprintf(buf, sizeof(buf), "127.0.0.1:%d/%s", port, id.c_str());
29+
snprintf(buf, sizeof(buf), "%s:%d/%s", host.c_str(), port, id.c_str());
3030
return buf;
3131
}
3232

@@ -74,7 +74,8 @@ void OnBufferAlloc(uv_handle_t* handle, size_t len, uv_buf_t* buf) {
7474
buf->len = len;
7575
}
7676

77-
void PrintDebuggerReadyMessage(int port,
77+
void PrintDebuggerReadyMessage(const std::string& host,
78+
int port,
7879
const std::vector<std::string>& ids,
7980
FILE* out) {
8081
if (out == NULL) {
@@ -92,7 +93,8 @@ void PrintDebuggerReadyMessage(int port,
9293
for (const std::string& id : ids) {
9394
fprintf(out,
9495
" chrome-devtools://devtools/bundled/inspector.html?"
95-
"experiments=true&v8only=true&ws=%s\n", GetWsUrl(port, id).c_str());
96+
"experiments=true&v8only=true&ws=%s\n",
97+
GetWsUrl(host, port, id).c_str());
9698
}
9799
fflush(out);
98100
}
@@ -229,9 +231,11 @@ class SocketSession {
229231
};
230232

231233
InspectorSocketServer::InspectorSocketServer(SocketServerDelegate* delegate,
234+
const std::string& host,
232235
int port,
233236
FILE* out) : loop_(nullptr),
234237
delegate_(delegate),
238+
host_(host),
235239
port_(port),
236240
server_(uv_tcp_t()),
237241
closer_(nullptr),
@@ -284,7 +288,7 @@ void InspectorSocketServer::SessionTerminated(int session_id) {
284288
delegate_->EndSession(session_id);
285289
if (connected_sessions_.empty() &&
286290
uv_is_active(reinterpret_cast<uv_handle_t*>(&server_))) {
287-
PrintDebuggerReadyMessage(port_, delegate_->GetTargetIds(), out_);
291+
PrintDebuggerReadyMessage(host_, port_, delegate_->GetTargetIds(), out_);
288292
}
289293
}
290294

@@ -337,7 +341,7 @@ void InspectorSocketServer::SendListResponse(InspectorSocket* socket) {
337341
}
338342
}
339343
if (!connected) {
340-
std::string address = GetWsUrl(port_, id);
344+
std::string address = GetWsUrl(host_, port_, id);
341345
std::ostringstream frontend_url;
342346
frontend_url << "chrome-devtools://devtools/bundled";
343347
frontend_url << "/inspector.html?experiments=true&v8only=true&ws=";
@@ -353,7 +357,7 @@ bool InspectorSocketServer::Start(uv_loop_t* loop) {
353357
loop_ = loop;
354358
sockaddr_in addr;
355359
uv_tcp_init(loop_, &server_);
356-
uv_ip4_addr("0.0.0.0", port_, &addr);
360+
uv_ip4_addr(host_.c_str(), port_, &addr);
357361
int err = uv_tcp_bind(&server_,
358362
reinterpret_cast<const struct sockaddr*>(&addr), 0);
359363
if (err == 0)
@@ -363,11 +367,13 @@ bool InspectorSocketServer::Start(uv_loop_t* loop) {
363367
SocketConnectedCallback);
364368
}
365369
if (err == 0 && connected_sessions_.empty()) {
366-
PrintDebuggerReadyMessage(port_, delegate_->GetTargetIds(), out_);
370+
PrintDebuggerReadyMessage(host_, port_, delegate_->GetTargetIds(), out_);
367371
}
368372
if (err != 0 && connected_sessions_.empty()) {
369373
if (out_ != NULL) {
370-
fprintf(out_, "Unable to open devtools socket: %s\n", uv_strerror(err));
374+
fprintf(out_, "Starting inspector on %s:%d failed: %s\n",
375+
host_.c_str(), port_, uv_strerror(err));
376+
fflush(out_);
371377
}
372378
uv_close(reinterpret_cast<uv_handle_t*>(&server_), nullptr);
373379
return false;
Collapse file

‎src/inspector_socket_server.h‎

Copy file name to clipboardExpand all lines: src/inspector_socket_server.h
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class InspectorSocketServer {
3333
public:
3434
using ServerCallback = void (*)(InspectorSocketServer*);
3535
InspectorSocketServer(SocketServerDelegate* delegate,
36+
const std::string& host,
3637
int port,
3738
FILE* out = stderr);
3839
bool Start(uv_loop_t* loop);
@@ -65,6 +66,7 @@ class InspectorSocketServer {
6566

6667
uv_loop_t* loop_;
6768
SocketServerDelegate* const delegate_;
69+
const std::string host_;
6870
int port_;
6971
std::string path_;
7072
uv_tcp_t server_;
Collapse file

‎src/node.cc‎

Copy file name to clipboardExpand all lines: src/node.cc
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4331,7 +4331,7 @@ inline int Start(Isolate* isolate, IsolateData* isolate_data,
43314331
if (debug_enabled) {
43324332
const char* path = argc > 1 ? argv[1] : nullptr;
43334333
StartDebug(&env, path, debug_options);
4334-
if (debug_options.debugger_enabled() && !debugger_running)
4334+
if (!debugger_running)
43354335
return 12; // Signal internal error.
43364336
}
43374337

Collapse file

‎test/cctest/test_inspector_socket_server.cc‎

Copy file name to clipboardExpand all lines: test/cctest/test_inspector_socket_server.cc
+12-10Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
static uv_loop_t loop;
1010

11+
static const char HOST[] = "127.0.0.1";
12+
1113
static const char CLIENT_CLOSE_FRAME[] = "\x88\x80\x2D\x0E\x1E\xFA";
1214
static const char SERVER_CLOSE_FRAME[] = "\x88\x00";
1315

@@ -249,7 +251,7 @@ class SocketWrapper {
249251
}
250252

251253
static void Connected_(uv_connect_t* connect, int status) {
252-
EXPECT_EQ(0, status);
254+
EXPECT_EQ(0, status) << "Unable to connect: " << uv_strerror(status);
253255
SocketWrapper* wrapper =
254256
node::ContainerOf(&SocketWrapper::connect_, connect);
255257
wrapper->connected_ = true;
@@ -301,7 +303,7 @@ class ServerHolder {
301303
template <typename Delegate>
302304
ServerHolder(Delegate* delegate, int port, FILE* out = NULL)
303305
: closed(false), paused(false), sessions_terminated(false),
304-
server_(delegate, port, out) {
306+
server_(delegate, HOST, port, out) {
305307
delegate->Connect(&server_);
306308
}
307309

@@ -362,7 +364,7 @@ class ServerDelegateNoTargets : public SocketServerDelegate {
362364
static void TestHttpRequest(int port, const std::string& path,
363365
const std::string& expected_body) {
364366
SocketWrapper socket(&loop);
365-
socket.Connect("0.0.0.0", port);
367+
socket.Connect(HOST, port);
366368
socket.TestHttpRequest(path, expected_body);
367369
socket.Close();
368370
}
@@ -385,7 +387,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
385387

386388
SocketWrapper well_behaved_socket(&loop);
387389
// Regular connection
388-
well_behaved_socket.Connect("0.0.0.0", server.port());
390+
well_behaved_socket.Connect(HOST, server.port());
389391
well_behaved_socket.Write(WsHandshakeRequest(MAIN_TARGET_ID));
390392
well_behaved_socket.Expect(WS_HANDSHAKE_RESPONSE);
391393

@@ -408,7 +410,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
408410

409411
// Declined connection
410412
SocketWrapper declined_target_socket(&loop);
411-
declined_target_socket.Connect("127.0.0.1", server.port());
413+
declined_target_socket.Connect(HOST, server.port());
412414
declined_target_socket.Write(WsHandshakeRequest(UNCONNECTABLE_TARGET_ID));
413415
declined_target_socket.Expect("HTTP/1.0 400 Bad Request");
414416
declined_target_socket.ExpectEOF();
@@ -417,7 +419,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
417419

418420
// Bogus target - start session callback should not even be invoked
419421
SocketWrapper bogus_target_socket(&loop);
420-
bogus_target_socket.Connect("127.0.0.1", server.port());
422+
bogus_target_socket.Connect(HOST, server.port());
421423
bogus_target_socket.Write(WsHandshakeRequest("bogus_target"));
422424
bogus_target_socket.Expect("HTTP/1.0 400 Bad Request");
423425
bogus_target_socket.ExpectEOF();
@@ -426,7 +428,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
426428

427429
// Drop connection (no proper close frames)
428430
SocketWrapper dropped_connection_socket(&loop);
429-
dropped_connection_socket.Connect("127.0.0.1", server.port());
431+
dropped_connection_socket.Connect(HOST, server.port());
430432
dropped_connection_socket.Write(WsHandshakeRequest(MAIN_TARGET_ID));
431433
dropped_connection_socket.Expect(WS_HANDSHAKE_RESPONSE);
432434

@@ -440,7 +442,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
440442

441443
// Reconnect regular connection
442444
SocketWrapper stays_till_termination_socket(&loop);
443-
stays_till_termination_socket.Connect("127.0.0.1", server.port());
445+
stays_till_termination_socket.Connect(HOST, server.port());
444446
stays_till_termination_socket.Write(WsHandshakeRequest(MAIN_TARGET_ID));
445447
stays_till_termination_socket.Expect(WS_HANDSHAKE_RESPONSE);
446448

@@ -484,7 +486,7 @@ TEST_F(InspectorSocketServerTest, ServerWithoutTargets) {
484486

485487
// Declined connection
486488
SocketWrapper socket(&loop);
487-
socket.Connect("0.0.0.0", server.port());
489+
socket.Connect(HOST, server.port());
488490
socket.Write(WsHandshakeRequest(UNCONNECTABLE_TARGET_ID));
489491
socket.Expect("HTTP/1.0 400 Bad Request");
490492
socket.ExpectEOF();
@@ -512,7 +514,7 @@ TEST_F(InspectorSocketServerTest, StoppingServerDoesNotKillConnections) {
512514
ServerHolder server(&delegate, 0);
513515
ASSERT_TRUE(server->Start(&loop));
514516
SocketWrapper socket1(&loop);
515-
socket1.Connect("0.0.0.0", server.port());
517+
socket1.Connect(HOST, server.port());
516518
socket1.TestHttpRequest("/json/list", "[ ]");
517519
server->Stop(ServerHolder::CloseCallback);
518520
SPIN_WHILE(!server.closed);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.