Skip to content

Commit

Permalink
Merge pull request #53 from agoric-labs/sliakh-4103-xsnap-exit-EOF
Browse files Browse the repository at this point in the history
Make xsnap-worker log a simple message to stderr when netstring protocol is broken due to parent exit or closed/broken pipes.
  • Loading branch information
siarhei-agoric authored Sep 25, 2024
2 parents eef9b67 + a9738b2 commit 105bc68
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions xsnap/sources/xsnap-worker.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ static char* fxReadNetStringError(int code);
static int fxWriteOkay(FILE* outStream, xsUnsignedValue meterIndex, xsMachine *the, char* buf, size_t len);
static int fxWriteNetString(FILE* outStream, char* prefix, char* buf, size_t len);
static char* fxWriteNetStringError(int code);
static void fxSigPipeHandler(int sigNum);

extern xsIntegerValue fxGetCurrentHeapCount(xsMachine* the);

Expand Down Expand Up @@ -254,6 +255,14 @@ static char *renderTimestamps() {
return timestampBuffer;
}

static void fxSigPipeHandler(int sigNum)
{
if (sigNum == SIGPIPE) {
fprintf(stderr, "Caught SIGPIPE. Has parent died?\n");
c_exit(E_IO_ERROR);
}
}

int main(int argc, char* argv[])
{
int argi;
Expand Down Expand Up @@ -396,6 +405,9 @@ int main(int argc, char* argv[])
machine = xsCreateMachine(creation, "xsnap", NULL);
xsBuildAgent(machine);
}

signal(SIGPIPE, fxSigPipeHandler);

if (!(fromParent = fdopen(3, "rb"))) {
fprintf(stderr, "fdopen(3) from parent failed\n");
c_exit(E_IO_ERROR);
Expand Down Expand Up @@ -931,6 +943,10 @@ static void xs_issueCommand(xsMachine *the)
size_t len;
int readError = fxReadNetString(fromParent, &buf, &len);
if (readError != 0) {
if (feof(fromParent)) {
fprintf(stderr, "Got EOF on netstring read. Has parent died?\n");
c_exit(E_IO_ERROR);
}
xsUnknownError(fxReadNetStringError(readError));
}
recordTimestamp(); // after command-result received from parent
Expand Down

0 comments on commit 105bc68

Please sign in to comment.