* Just use the heap instead of cbuf for send_data().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33722 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -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 @@ struct thread {
|
||||
thread_id sender;
|
||||
int32 code;
|
||||
size_t size;
|
||||
cbuf *buffer;
|
||||
void* buffer;
|
||||
} msg;
|
||||
|
||||
union {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2008, Axel Dörfler, [email protected].
|
||||
* Copyright 2002-2009, Axel Dörfler, [email protected].
|
||||
* 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;
|
||||
|
||||
Reference in New Issue
Block a user