|
@@ -159,8 +159,6 @@ void vmnet_push_data(rx_command command) {
|
|
}
|
|
}
|
|
bool has_next = command.tid == 21;
|
|
bool has_next = command.tid == 21;
|
|
|
|
|
|
- log_message("vmnet_push_data 162 has_next = %d", has_next);
|
|
|
|
-
|
|
|
|
pthread_mutex_lock(&vmnet_queue_lock);
|
|
pthread_mutex_lock(&vmnet_queue_lock);
|
|
|
|
|
|
if (vmnet_queue_waiting_buffer == NULL) {
|
|
if (vmnet_queue_waiting_buffer == NULL) {
|
|
@@ -169,34 +167,26 @@ void vmnet_push_data(rx_command command) {
|
|
|
|
|
|
const int size = command.sstdin_len;
|
|
const int size = command.sstdin_len;
|
|
int approve_size = MIN(size, MAX_BUFFER_SIZE - vmnet_queue_waiting_buffer->length);
|
|
int approve_size = MIN(size, MAX_BUFFER_SIZE - vmnet_queue_waiting_buffer->length);
|
|
- log_message("vmnet_push_data 172 as=%d", approve_size);
|
|
|
|
if (approve_size > 0) {
|
|
if (approve_size > 0) {
|
|
memcpy(&vmnet_queue_waiting_buffer->buffer[vmnet_queue_waiting_buffer->length], &command.sstdin[0], approve_size);
|
|
memcpy(&vmnet_queue_waiting_buffer->buffer[vmnet_queue_waiting_buffer->length], &command.sstdin[0], approve_size);
|
|
vmnet_queue_waiting_buffer->length += approve_size;
|
|
vmnet_queue_waiting_buffer->length += approve_size;
|
|
}
|
|
}
|
|
|
|
|
|
- log_message("vmnet_push_data 178 ns=%d", vmnet_queue_waiting_buffer->length);
|
|
|
|
-
|
|
|
|
if (!has_next) {
|
|
if (!has_next) {
|
|
if (vmnet_queue_front == NULL) {
|
|
if (vmnet_queue_front == NULL) {
|
|
- vmnet_queue_front = vmnet_queue_waiting_buffer;log_message("vmnet_push_data 182");
|
|
|
|
|
|
+ vmnet_queue_front = vmnet_queue_waiting_buffer;
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- vmnet_queue_elem *elem = vmnet_queue_front;
|
|
|
|
- log_message("vmnet_push_data elema = %p", elem);
|
|
|
|
|
|
+ vmnet_queue_elem *elem, *elem_prev;
|
|
for (elem = vmnet_queue_front; elem != NULL; elem = elem->next) {
|
|
for (elem = vmnet_queue_front; elem != NULL; elem = elem->next) {
|
|
- log_message("vmnet_push_data elemb = %p", elem);
|
|
|
|
|
|
+ elem_prev = elem;
|
|
}
|
|
}
|
|
- log_message("vmnet_push_data elemc = %p", elem);
|
|
|
|
- elem->next = vmnet_queue_waiting_buffer;
|
|
|
|
- log_message("vmnet_push_data 188");
|
|
|
|
|
|
+ elem_prev->next = vmnet_queue_waiting_buffer;
|
|
}
|
|
}
|
|
vmnet_queue_waiting_buffer->next = NULL;
|
|
vmnet_queue_waiting_buffer->next = NULL;
|
|
vmnet_queue_waiting_buffer = NULL;
|
|
vmnet_queue_waiting_buffer = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
- log_message("vmnet_push_data done");
|
|
|
|
-
|
|
|
|
pthread_mutex_unlock(&vmnet_queue_lock);
|
|
pthread_mutex_unlock(&vmnet_queue_lock);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1316,11 +1306,9 @@ void *message_handler_thread(void *arg) {
|
|
while (1) {
|
|
while (1) {
|
|
// 读取消息
|
|
// 读取消息
|
|
int bytes_read = read_message(proxy_fd, buffer, MAX_BUFFER_SIZE, 1); // 1表示client
|
|
int bytes_read = read_message(proxy_fd, buffer, MAX_BUFFER_SIZE, 1); // 1表示client
|
|
-
|
|
|
|
- log_message("try get data: %d bytes", bytes_read);
|
|
|
|
|
|
|
|
if (bytes_read <= 0) {
|
|
if (bytes_read <= 0) {
|
|
- usleep(1000 * 100); // 如果没有消息,等待一段时间(100 ms)
|
|
|
|
|
|
+ usleep(1000 * 1); // 如果没有消息,等待一段时间(1 ms)
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1350,7 +1338,7 @@ void *message_handler_thread(void *arg) {
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- usleep(1000 * 10);
|
|
|
|
|
|
+ usleep(100);
|
|
}
|
|
}
|
|
|
|
|
|
return NULL;
|
|
return NULL;
|