Fix broken pipe error in Jerry Debugger (#2427)
This patch fixes an error caused by trying to send data to a closed socket. JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu
This commit is contained in:
@@ -37,9 +37,9 @@ typedef struct
|
|||||||
* Log tcp error message.
|
* Log tcp error message.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
jerryx_debugger_tcp_log_error (void)
|
jerryx_debugger_tcp_log_error (int err_val)
|
||||||
{
|
{
|
||||||
JERRYX_ERROR_MSG ("Error: %s\n", strerror (errno));
|
JERRYX_ERROR_MSG ("TCP Error: %s\n", strerror (err_val));
|
||||||
} /* jerryx_debugger_tcp_log_error */
|
} /* jerryx_debugger_tcp_log_error */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,6 +76,15 @@ jerryx_debugger_tcp_send (jerry_debugger_transport_header_t *header_p, /**< tcp
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
ssize_t is_err = recv (tcp_p->tcp_socket, NULL, 0, MSG_PEEK);
|
||||||
|
|
||||||
|
if (is_err == 0)
|
||||||
|
{
|
||||||
|
int err_val = errno;
|
||||||
|
jerry_debugger_transport_close ();
|
||||||
|
jerryx_debugger_tcp_log_error (err_val);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
ssize_t sent_bytes = send (tcp_p->tcp_socket, message_p, message_length, 0);
|
ssize_t sent_bytes = send (tcp_p->tcp_socket, message_p, message_length, 0);
|
||||||
|
|
||||||
if (sent_bytes < 0)
|
if (sent_bytes < 0)
|
||||||
@@ -85,8 +94,9 @@ jerryx_debugger_tcp_send (jerry_debugger_transport_header_t *header_p, /**< tcp
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
jerryx_debugger_tcp_log_error ();
|
int err_val = errno;
|
||||||
jerry_debugger_transport_close ();
|
jerry_debugger_transport_close ();
|
||||||
|
jerryx_debugger_tcp_log_error (err_val);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,12 +122,13 @@ jerryx_debugger_tcp_receive (jerry_debugger_transport_header_t *header_p, /**< t
|
|||||||
|
|
||||||
ssize_t length = recv (tcp_p->tcp_socket, buffer_p, buffer_size, 0);
|
ssize_t length = recv (tcp_p->tcp_socket, buffer_p, buffer_size, 0);
|
||||||
|
|
||||||
if (length < 0)
|
if (length <= 0)
|
||||||
{
|
{
|
||||||
if (errno != EWOULDBLOCK)
|
if (errno != EWOULDBLOCK || length == 0)
|
||||||
{
|
{
|
||||||
jerryx_debugger_tcp_log_error ();
|
int err_val = errno;
|
||||||
jerry_debugger_transport_close ();
|
jerry_debugger_transport_close ();
|
||||||
|
jerryx_debugger_tcp_log_error (err_val);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
length = 0;
|
length = 0;
|
||||||
|
|||||||
@@ -91,7 +91,10 @@ jerry_port_log (jerry_log_level_t level, /**< message log level */
|
|||||||
vsnprintf (buffer, (size_t) length + 1, format, args);
|
vsnprintf (buffer, (size_t) length + 1, format, args);
|
||||||
|
|
||||||
fprintf (stderr, "%s", buffer);
|
fprintf (stderr, "%s", buffer);
|
||||||
jerry_debugger_send_output ((jerry_char_t *) buffer, (jerry_size_t) length, (uint8_t) (level + 2));
|
if (jerry_debugger_transport_is_connected ())
|
||||||
|
{
|
||||||
|
jerry_debugger_send_output ((jerry_char_t *) buffer, (jerry_size_t) length, (uint8_t) (level + 2));
|
||||||
|
}
|
||||||
#else /* If jerry-debugger isn't defined, libc is turned on */
|
#else /* If jerry-debugger isn't defined, libc is turned on */
|
||||||
vfprintf (stderr, format, args);
|
vfprintf (stderr, format, args);
|
||||||
#endif /* JERRY_DEBUGGER */
|
#endif /* JERRY_DEBUGGER */
|
||||||
|
|||||||
Reference in New Issue
Block a user