diff --git a/headers/private/kernel/thread_types.h b/headers/private/kernel/thread_types.h index 20194512f6..7b79d9ad94 100644 --- a/headers/private/kernel/thread_types.h +++ b/headers/private/kernel/thread_types.h @@ -1,5 +1,5 @@ /* - * Copyright 2004-2008, Haiku Inc. + * Copyright 2004-2009, Haiku Inc. * Distributed under the terms of the MIT License. * * Thread definition and structures @@ -7,9 +7,9 @@ #ifndef _KERNEL_THREAD_TYPES_H #define _KERNEL_THREAD_TYPES_H + #ifndef _ASSEMBLER -#include #include #include #include @@ -274,7 +274,7 @@ struct thread { thread_id sender; int32 code; size_t size; - cbuf *buffer; + void* buffer; } msg; union { diff --git a/src/system/kernel/thread.cpp b/src/system/kernel/thread.cpp index 46c309d84e..85f66a7e61 100644 --- a/src/system/kernel/thread.cpp +++ b/src/system/kernel/thread.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. * * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. @@ -698,7 +698,6 @@ send_data_etc(thread_id id, int32 code, const void *buffer, size_t bufferSize, sem_id cachedSem; cpu_status state; status_t status; - cbuf *data; state = disable_interrupts(); GRAB_THREAD_LOCK(); @@ -725,14 +724,14 @@ send_data_etc(thread_id id, int32 code, const void *buffer, size_t bufferSize, return B_BAD_THREAD_ID; } + void* data; if (bufferSize > 0) { - data = cbuf_get_chain(bufferSize); + data = malloc(bufferSize); if (data == NULL) return B_NO_MEMORY; - status = cbuf_user_memcpy_to_chain(data, 0, buffer, bufferSize); - if (status < B_OK) { - cbuf_free_chain(data); - return B_NO_MEMORY; + if (user_memcpy(data, buffer, bufferSize) != B_OK) { + free(data); + return B_BAD_DATA; } } else data = NULL; @@ -745,7 +744,7 @@ send_data_etc(thread_id id, int32 code, const void *buffer, size_t bufferSize, if (target == NULL) { RELEASE_THREAD_LOCK(); restore_interrupts(state); - cbuf_free_chain(data); + free(data); return B_BAD_THREAD_ID; } @@ -784,10 +783,9 @@ receive_data_etc(thread_id *_sender, void *buffer, size_t bufferSize, if (buffer != NULL && bufferSize != 0 && thread->msg.buffer != NULL) { size = min_c(bufferSize, thread->msg.size); - status = cbuf_user_memcpy_from_chain(buffer, thread->msg.buffer, - 0, size); - if (status < B_OK) { - cbuf_free_chain(thread->msg.buffer); + status = user_memcpy(buffer, thread->msg.buffer, size); + if (status != B_OK) { + free(thread->msg.buffer); release_sem(thread->msg.write_sem); return status; } @@ -796,7 +794,7 @@ receive_data_etc(thread_id *_sender, void *buffer, size_t bufferSize, *_sender = thread->msg.sender; code = thread->msg.code; - cbuf_free_chain(thread->msg.buffer); + free(thread->msg.buffer); release_sem(thread->msg.write_sem); return code;