Skip to content
This repository was archived by the owner on Mar 1, 2022. It is now read-only.

Commit d2c0e9c

Browse files
ryuukkWebFreak001
authored andcommitted
Fix #113 serve-d being stuck in endless loop
DCD serverPipes code rewritten by webfreak
1 parent 0a4c1f2 commit d2c0e9c

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

source/workspaced/api.d

+3
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,10 @@ mixin template DefaultComponentWrapper(bool withDtor = true)
106106
if (!_threads)
107107
synchronized (this)
108108
if (!_threads)
109+
{
109110
_threads = new TaskPool(max(minSize, min(maxSize, defaultPoolThreads)));
111+
_threads.isDaemon = true;
112+
}
110113
return _threads;
111114
}
112115

source/workspaced/backend.d

+3
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,10 @@ class WorkspaceD
623623
if (!_gthreads)
624624
synchronized (this)
625625
if (!_gthreads)
626+
{
626627
_gthreads = new TaskPool(max(2, min(6, defaultPoolThreads)));
628+
_gthreads.isDaemon = true;
629+
}
627630
return _gthreads;
628631
}
629632
}

source/workspaced/com/dcd.d

+22-11
Original file line numberDiff line numberDiff line change
@@ -227,16 +227,28 @@ class DCDComponent : ComponentWrapper
227227
running = true;
228228
serverThreads.create({
229229
mixin(traceTask);
230-
if (quietServer)
231-
foreach (block; serverPipes.stderr.byChunk(4096))
232-
{
233-
}
234-
else
235-
while (serverPipes.stderr.isOpen && !serverPipes.stderr.eof)
236-
{
237-
auto line = serverPipes.stderr.readln();
238-
trace("Server: ", line); // evaluates lazily, so read before
239-
}
230+
scope (exit)
231+
running = false;
232+
233+
try
234+
{
235+
if (quietServer)
236+
foreach (block; serverPipes.stderr.byChunk(4096))
237+
{
238+
}
239+
else
240+
while (serverPipes.stderr.isOpen && !serverPipes.stderr.eof)
241+
{
242+
auto line = serverPipes.stderr.readln();
243+
trace("Server: ", line); // evaluates lazily, so read before
244+
}
245+
}
246+
catch (Exception e)
247+
{
248+
error("Reading/clearing stderr from dcd-server crashed (-> killing dcd-server): ", e);
249+
serverPipes.pid.kill();
250+
}
251+
240252
auto code = serverPipes.pid.wait();
241253
info("DCD-Server stopped with code ", code);
242254
if (code != 0)
@@ -246,7 +258,6 @@ class DCDComponent : ComponentWrapper
246258
"type": JSONValue("crash"),
247259
"component": JSONValue("dcd")
248260
]));
249-
running = false;
250261
}
251262
});
252263
}

0 commit comments

Comments
 (0)