mirror of
https://github.com/tsl0922/ttyd.git
synced 2025-12-23 04:14:18 +01:00
protocol: replace sleep with pthread cond
This commit is contained in:
@@ -199,9 +199,7 @@ thread_run_command(void *args) {
|
||||
while (client->running) {
|
||||
pthread_mutex_lock(&client->mutex);
|
||||
if (client->state == STATE_READY) {
|
||||
pthread_mutex_unlock(&client->mutex);
|
||||
usleep(5);
|
||||
continue;
|
||||
pthread_cond_wait(&client->cond, &client->mutex);
|
||||
}
|
||||
memset(client->pty_buffer, 0, sizeof(client->pty_buffer));
|
||||
client->pty_len = read(pty, client->pty_buffer + LWS_PRE + 1, BUF_SIZE);
|
||||
@@ -255,6 +253,7 @@ callback_tty(struct lws *wsi, enum lws_callback_reasons reason,
|
||||
client->state = STATE_INIT;
|
||||
client->pty_len = 0;
|
||||
pthread_mutex_init(&client->mutex, NULL);
|
||||
pthread_cond_init(&client->cond, NULL);
|
||||
lws_get_peer_addresses(wsi, lws_get_socket_fd(wsi),
|
||||
client->hostname, sizeof(client->hostname),
|
||||
client->address, sizeof(client->address));
|
||||
|
||||
@@ -475,6 +475,8 @@ main(int argc, char **argv) {
|
||||
pthread_mutex_lock(&client->mutex);
|
||||
if (client->state != STATE_DONE)
|
||||
lws_callback_on_writable(client->wsi);
|
||||
else
|
||||
pthread_cond_signal(&client->cond);
|
||||
pthread_mutex_unlock(&client->mutex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ struct tty_client {
|
||||
ssize_t pty_len;
|
||||
pthread_t thread;
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
|
||||
LIST_ENTRY(tty_client) list;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user