fix(win): do not allow exitcode==1 and signalCode to be set at once (#10907)

This commit is contained in:
dave caruso
2024-05-08 16:00:35 -07:00
committed by GitHub
parent f60d87b7df
commit f1fbf54b0a
4 changed files with 18 additions and 20 deletions

View File

@@ -385,21 +385,21 @@ pub const Process = struct {
bun.windows.libuv.log("Process.onExit({d}) code: {d}, signal: {?}", .{ process.pid, exit_code, signal_code });
if (exit_code >= 0) {
this.close();
this.onExit(
.{
.exited = .{ .code = exit_code, .signal = signal_code orelse @enumFromInt(0) },
},
&rusage,
);
} else if (signal_code) |sig| {
if (signal_code) |sig| {
this.close();
this.onExit(
.{ .signaled = sig },
&rusage,
);
} else if (exit_code >= 0) {
this.close();
this.onExit(
.{
.exited = .{ .code = exit_code, .signal = @enumFromInt(0) },
},
&rusage,
);
} else {
this.onExit(
.{
@@ -575,7 +575,10 @@ pub const Status = union(enum) {
if (exit_code != null) {
return .{
.exited = .{ .code = exit_code.?, .signal = @enumFromInt(signal orelse 0) },
.exited = .{
.code = exit_code.?,
.signal = @enumFromInt(signal orelse 0),
},
};
} else if (signal != null) {
return .{

View File

@@ -309,9 +309,6 @@ pub const RunCommand = struct {
if (!use_system_shell) {
if (!silent) {
if (Environment.isDebug) {
Output.prettyError("[bun shell] ", .{});
}
Output.prettyErrorln("<r><d><magenta>$<r> <d><b>{s}<r>", .{combined_script});
Output.flush();
}

View File

@@ -22,7 +22,7 @@ describe("subprocess.kill", () => {
proc.kill(...input);
await promise;
expect(proc.exitCode).toBe(isWindows ? 1 : null);
expect(proc.exitCode).toBe(null);
expect(proc.signalCode).toBe(key as any);
});
}
@@ -45,7 +45,7 @@ describe("subprocess.kill", () => {
await promise;
expect(proc.exitCode).toBe(isWindows ? 1 : null);
expect(proc.exitCode).toBe(null);
expect(proc.signalCode).toBe("SIGTERM");
});
}

View File

@@ -545,11 +545,9 @@ describe("websocket in subprocess", () => {
subprocess.kill();
if (isWindows) {
expect(await subprocess.exited).toBe(1);
} else {
expect(await subprocess.exited).toBe(143);
}
expect(await subprocess.exited).toBe(143); // 128 + 15 (SIGTERM)
expect(subprocess.exitCode).toBe(null);
expect(subprocess.signalCode).toBe("SIGTERM");
});
it("should exit with invalid url", async () => {