|
@@ -87,6 +87,7 @@ pthread_mutex_t vmnet_queue_lock;
|
|
|
|
|
|
extern int vmnetproxy_main(void);
|
|
|
extern void tx_push(tx_command cmd);
|
|
|
+extern void log_message(const char *format, ...);
|
|
|
|
|
|
void vmnet_queue_setup(void) {
|
|
|
vmnet_queue_front = NULL;
|
|
@@ -158,6 +159,8 @@ void vmnet_push_data(rx_command command) {
|
|
|
}
|
|
|
bool has_next = command.tid == 21;
|
|
|
|
|
|
+ log_message("vmnet_push_data 162 has_next = %d", has_next);
|
|
|
+
|
|
|
pthread_mutex_lock(&vmnet_queue_lock);
|
|
|
|
|
|
if (vmnet_queue_waiting_buffer == NULL) {
|
|
@@ -166,24 +169,30 @@ void vmnet_push_data(rx_command command) {
|
|
|
|
|
|
const int size = command.sstdin_len;
|
|
|
int approve_size = MIN(size, MAX_BUFFER_SIZE - vmnet_queue_waiting_buffer->length);
|
|
|
- if (approve_size >= 0) {
|
|
|
- memcpy(&vmnet_queue_waiting_buffer->buffer[vmnet_queue_waiting_buffer->length], command.sstdin, approve_size);
|
|
|
+ log_message("vmnet_push_data 172 as=%d", approve_size);
|
|
|
+ if (approve_size > 0) {
|
|
|
+ memcpy(&vmnet_queue_waiting_buffer->buffer[vmnet_queue_waiting_buffer->length], &command.sstdin[0], 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 (vmnet_queue_front == NULL) {
|
|
|
- vmnet_queue_front = vmnet_queue_waiting_buffer;
|
|
|
+ vmnet_queue_front = vmnet_queue_waiting_buffer;log_message("vmnet_push_data 182");
|
|
|
}
|
|
|
else {
|
|
|
vmnet_queue_elem *elem;
|
|
|
for (elem = vmnet_queue_front; elem != NULL; elem = elem->next) ;
|
|
|
elem->next = vmnet_queue_waiting_buffer;
|
|
|
+ log_message("vmnet_push_data 188");
|
|
|
}
|
|
|
vmnet_queue_waiting_buffer->next = NULL;
|
|
|
vmnet_queue_waiting_buffer = NULL;
|
|
|
}
|
|
|
|
|
|
+ log_message("vmnet_push_data done");
|
|
|
+
|
|
|
pthread_mutex_unlock(&vmnet_queue_lock);
|
|
|
}
|
|
|
|