diff options
author | Michael LeBeane <michael.lebeane@amd.com> | 2016-09-13 23:08:34 -0400 |
---|---|---|
committer | Michael LeBeane <michael.lebeane@amd.com> | 2016-09-13 23:08:34 -0400 |
commit | febab25957066cf9b470864b6bda38687918b36d (patch) | |
tree | 5b848413e9092c8c1c7a422b70e9228038e975db /src/dev/net/tcp_iface.cc | |
parent | cc58148fe11fd9f579cf7b918472552897c809fb (diff) | |
download | gem5-febab25957066cf9b470864b6bda38687918b36d.tar.xz |
dev: Exit correctly in dist-gem5
The receiver thread in dist_iface is allowed to directly exit the simulation.
This can cause exit to be called twice if the main thread simultaneously wants
to exit the simulation. Therefore, have the receiver thread enqueue a request
to exit on the primary event queue for the main simulation thread to handle.
Diffstat (limited to 'src/dev/net/tcp_iface.cc')
-rw-r--r-- | src/dev/net/tcp_iface.cc | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/dev/net/tcp_iface.cc b/src/dev/net/tcp_iface.cc index 38fc7aef2..c9ca57778 100644 --- a/src/dev/net/tcp_iface.cc +++ b/src/dev/net/tcp_iface.cc @@ -267,9 +267,8 @@ TCPIface::sendTCP(int sock, const void *buf, unsigned length) ret = ::send(sock, buf, length, MSG_NOSIGNAL); if (ret < 0) { if (errno == ECONNRESET || errno == EPIPE) { - inform("send(): %s", strerror(errno)); - exit_message("info", 0, "Message server closed connection, " - "simulation is exiting"); + exitSimLoop("Message server closed connection, simulation " + "is exiting"); } else { panic("send() failed: %s", strerror(errno)); } |