diff --git a/src/libs/compat/freebsd_network/Condvar.cpp b/src/libs/compat/freebsd_network/Condvar.cpp index 51112fd4bc..e93d2ce736 100644 --- a/src/libs/compat/freebsd_network/Condvar.cpp +++ b/src/libs/compat/freebsd_network/Condvar.cpp @@ -11,8 +11,6 @@ extern "C" { #include -#include - #include "Condvar.h" #include "device.h" @@ -23,8 +21,7 @@ extern "C" { void conditionInit(struct cv* variable, const char* description) { - variable->condition = new(std::nothrow) ConditionVariable(); - variable->condition->Init(variable, description); + variable->condition.Init(variable, description); } @@ -32,23 +29,21 @@ void conditionPublish(struct cv* variable, const void* waitChannel, const char* description) { - variable->condition = new(std::nothrow) ConditionVariable(); - variable->condition->Publish(waitChannel, description); + variable->condition.Publish(waitChannel, description); } void -conditionUnpublish(const struct cv* variable) +conditionUnpublish(struct cv* variable) { - variable->condition->Unpublish(); - delete variable->condition; + variable->condition.Unpublish(); } int -conditionTimedWait(const struct cv* variable, const int timeout) +conditionTimedWait(struct cv* variable, const int timeout) { - status_t status = variable->condition->Wait(B_RELATIVE_TIMEOUT, + status_t status = variable->condition.Wait(B_RELATIVE_TIMEOUT, ticks_to_usecs(timeout)); if (status != B_OK) @@ -58,16 +53,16 @@ conditionTimedWait(const struct cv* variable, const int timeout) void -conditionWait(const struct cv* variable) +conditionWait(struct cv* variable) { - variable->condition->Wait(); + variable->condition.Wait(); } void -conditionNotifyOne(const struct cv* variable) +conditionNotifyOne(struct cv* variable) { - variable->condition->NotifyOne(); + variable->condition.NotifyOne(); } diff --git a/src/libs/compat/freebsd_network/Condvar.h b/src/libs/compat/freebsd_network/Condvar.h index 617f324829..bff1b0d7bb 100644 --- a/src/libs/compat/freebsd_network/Condvar.h +++ b/src/libs/compat/freebsd_network/Condvar.h @@ -12,10 +12,10 @@ extern "C" { void conditionInit(struct cv*, const char*); void conditionPublish(struct cv*, const void*, const char*); -void conditionUnpublish(const struct cv*); -int conditionTimedWait(const struct cv*, const int); -void conditionWait(const struct cv*); -void conditionNotifyOne(const struct cv*); +void conditionUnpublish(struct cv*); +int conditionTimedWait(struct cv*, const int); +void conditionWait(struct cv*); +void conditionNotifyOne(struct cv*); int publishedConditionTimedWait(const void*, const int); void publishedConditionNotifyAll(const void*); diff --git a/src/libs/compat/freebsd_network/Jamfile b/src/libs/compat/freebsd_network/Jamfile index 5933eaae41..2e5219f646 100644 --- a/src/libs/compat/freebsd_network/Jamfile +++ b/src/libs/compat/freebsd_network/Jamfile @@ -6,6 +6,10 @@ UsePrivateHeaders net ; UsePrivateKernelHeaders ; UseHeaders $(HAIKU_PRIVATE_KERNEL_HEADERS) : true ; +# Enabling C++ structures in C only code +Includes [ FGristFiles kernel_c++_structs.h ] + : kernel_c++_struct_sizes.h ; + SubDirCcFlags [ FDefines _KERNEL=1 ] ; KernelStaticLibrary libfreebsd_network.a : diff --git a/src/libs/compat/freebsd_network/compat/sys/condvar.h b/src/libs/compat/freebsd_network/compat/sys/condvar.h index 676967f639..55b96a816b 100644 --- a/src/libs/compat/freebsd_network/compat/sys/condvar.h +++ b/src/libs/compat/freebsd_network/compat/sys/condvar.h @@ -8,9 +8,17 @@ #include +#ifdef __cplusplus +} /* extern "C" */ +#include +extern "C" { +#else +#include +#endif + struct cv { - struct ConditionVariable* condition; + struct ConditionVariable condition; };