Author: axeld Date: 2009-10-22 13:42:51 +0200 (Thu, 22 Oct 2009) New Revision: 33722 Changeset: http://dev.haiku-os.org/changeset/33722/haiku Modified: haiku/trunk/headers/private/kernel/thread_types.h haiku/trunk/src/system/kernel/thread.cpp Log: * Just use the heap instead of cbuf for send_data(). Modified: haiku/trunk/headers/private/kernel/thread_types.h =================================================================== --- haiku/trunk/headers/private/kernel/thread_types.h 2009-10-22 08:57:34 UTC (rev 33721) +++ haiku/trunk/headers/private/kernel/thread_types.h 2009-10-22 11:42:51 UTC (rev 33722) @@ -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 <cbuf.h> #include <smp.h> #include <signal.h> #include <thread_defs.h> @@ -274,7 +274,7 @@ thread_id sender; int32 code; size_t size; - cbuf *buffer; + void* buffer; } msg; union { Modified: haiku/trunk/src/system/kernel/thread.cpp =================================================================== --- haiku/trunk/src/system/kernel/thread.cpp 2009-10-22 08:57:34 UTC (rev 33721) +++ haiku/trunk/src/system/kernel/thread.cpp 2009-10-22 11:42:51 UTC (rev 33722) @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx + * Copyright 2002-2009, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx * Distributed under the terms of the MIT License. * * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. @@ -698,7 +698,6 @@ sem_id cachedSem; cpu_status state; status_t status; - cbuf *data; state = disable_interrupts(); GRAB_THREAD_LOCK(); @@ -725,14 +724,14 @@ 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 @@ if (target == NULL) { RELEASE_THREAD_LOCK(); restore_interrupts(state); - cbuf_free_chain(data); + free(data); return B_BAD_THREAD_ID; } @@ -784,10 +783,9 @@ 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 @@ *_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;