Use Mutex/Blockade instead of Lock
due to changes in Genode repository Issue genodelabs/genode#3802
This commit is contained in:
committed by
Norman Feske
parent
50334e62f4
commit
f19ecb0650
@@ -1 +1 @@
|
|||||||
319da8b104f7eca04998b1f3ae3041e4bca0fd9c
|
a912520e3a877afd0ecc7cd71b9ca13aee08d713
|
||||||
|
|||||||
@@ -10,12 +10,12 @@
|
|||||||
#include "private/implementations.h"
|
#include "private/implementations.h"
|
||||||
#include "private/mutex.h"
|
#include "private/mutex.h"
|
||||||
|
|
||||||
#include <base/lock.h>
|
#include <base/mutex.h>
|
||||||
#include <base/log.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
static int initialized;
|
static int initialized;
|
||||||
|
|
||||||
static Genode::Lock *_sodium_lock;
|
static Genode::Mutex *_sodium_mutex;
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
int sodium_init(void)
|
int sodium_init(void)
|
||||||
@@ -35,14 +35,14 @@ int sodium_init(void)
|
|||||||
int
|
int
|
||||||
sodium_crit_enter(void)
|
sodium_crit_enter(void)
|
||||||
{
|
{
|
||||||
_sodium_lock->lock();
|
_sodium_mutex->acquire();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
sodium_crit_leave(void)
|
sodium_crit_leave(void)
|
||||||
{
|
{
|
||||||
_sodium_lock->unlock();
|
_sodium_mutex->release();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,16 +13,26 @@ index a311889..967be6a 100644
|
|||||||
#define GOOGLE_PROTOBUF_STUBS_MUTEX_H_
|
#define GOOGLE_PROTOBUF_STUBS_MUTEX_H_
|
||||||
|
|
||||||
-#include <mutex>
|
-#include <mutex>
|
||||||
+#include <base/lock.h>
|
+#include <base/mutex.h>
|
||||||
|
|
||||||
#ifdef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
#ifdef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ class PROTOBUF_EXPORT GOOGLE_PROTOBUF_CAPABILITY("mutex") WrappedMutex {
|
@@ -96,15 +96,15 @@
|
||||||
|
class PROTOBUF_EXPORT GOOGLE_PROTOBUF_CAPABILITY("mutex") WrappedMutex {
|
||||||
|
public:
|
||||||
|
WrappedMutex() = default;
|
||||||
|
- void Lock() GOOGLE_PROTOBUF_ACQUIRE() { mu_.lock(); }
|
||||||
|
- void Unlock() GOOGLE_PROTOBUF_RELEASE() { mu_.unlock(); }
|
||||||
|
+ void Lock() GOOGLE_PROTOBUF_ACQUIRE() { mu_.acquire(); }
|
||||||
|
+ void Unlock() GOOGLE_PROTOBUF_RELEASE() { mu_.release(); }
|
||||||
|
// Crash if this Mutex is not held exclusively by this thread.
|
||||||
|
// May fail to crash when it should; will never crash when it should not.
|
||||||
|
void AssertHeld() const {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
#ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
||||||
- std::mutex mu_;
|
- std::mutex mu_;
|
||||||
+ Genode::Lock mu_;
|
+ Genode::Mutex mu_;
|
||||||
#else // ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
#else // ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
||||||
CriticalSectionLock mu_;
|
CriticalSectionLock mu_;
|
||||||
#endif // #ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
#endif // #ifndef GOOGLE_PROTOBUF_SUPPORT_WINDOWS_XP
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
#include <SDL_genode_internal.h>
|
#include <SDL_genode_internal.h>
|
||||||
|
|
||||||
|
|
||||||
extern Genode::Env *global_env();
|
extern Genode::Env *global_env();
|
||||||
extern Genode::Lock event_lock;
|
extern Genode::Mutex event_mutex;
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@@ -75,7 +75,7 @@ struct Volume_config
|
|||||||
|
|
||||||
if (!_config_rom.valid()) { return; }
|
if (!_config_rom.valid()) { return; }
|
||||||
|
|
||||||
Genode::Lock_guard<Genode::Lock> guard(event_lock);
|
Genode::Mutex::Guard guard(event_mutex);
|
||||||
|
|
||||||
Genode::Xml_node config = _config_rom.xml();
|
Genode::Xml_node config = _config_rom.xml();
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ static void GENODEAUD_WaitAudio(_THIS)
|
|||||||
|
|
||||||
static void GENODEAUD_PlayAudio(_THIS)
|
static void GENODEAUD_PlayAudio(_THIS)
|
||||||
{
|
{
|
||||||
Genode::Lock_guard<Genode::Lock> guard(event_lock);
|
Genode::Mutex::Guard guard(event_mutex);
|
||||||
|
|
||||||
Audio_out::Connection *c[AUDIO_CHANNELS];
|
Audio_out::Connection *c[AUDIO_CHANNELS];
|
||||||
Audio_out::Packet *p[AUDIO_CHANNELS];
|
Audio_out::Packet *p[AUDIO_CHANNELS];
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
#include <SDL_genode_internal.h>
|
#include <SDL_genode_internal.h>
|
||||||
|
|
||||||
|
|
||||||
Genode::Lock event_lock;
|
Genode::Mutex event_mutex;
|
||||||
Video video_events;
|
Video video_events;
|
||||||
|
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ extern "C" {
|
|||||||
|
|
||||||
void Genode_Fb_PumpEvents(SDL_VideoDevice *t)
|
void Genode_Fb_PumpEvents(SDL_VideoDevice *t)
|
||||||
{
|
{
|
||||||
Genode::Lock_guard<Genode::Lock> guard(event_lock);
|
Genode::Mutex::Guard guard(event_mutex);
|
||||||
|
|
||||||
if (video_events.resize_pending) {
|
if (video_events.resize_pending) {
|
||||||
video_events.resize_pending = false;
|
video_events.resize_pending = false;
|
||||||
|
|||||||
@@ -41,8 +41,8 @@
|
|||||||
extern Genode::Env &global_env();
|
extern Genode::Env &global_env();
|
||||||
extern Gui::Connection &global_gui();
|
extern Gui::Connection &global_gui();
|
||||||
|
|
||||||
extern Genode::Lock event_lock;
|
extern Genode::Mutex event_mutex;
|
||||||
extern Video video_events;
|
extern Video video_events;
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -68,7 +68,7 @@ extern "C" {
|
|||||||
|
|
||||||
void _handle_mode_change()
|
void _handle_mode_change()
|
||||||
{
|
{
|
||||||
Genode::Lock_guard<Genode::Lock> guard(event_lock);
|
Genode::Mutex::Guard guard(event_mutex);
|
||||||
|
|
||||||
Framebuffer::Mode mode = _gui.mode();
|
Framebuffer::Mode mode = _gui.mode();
|
||||||
df_mode.w = mode.area.w();
|
df_mode.w = mode.area.w();
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
#include <SDL_genode_internal.h>
|
#include <SDL_genode_internal.h>
|
||||||
|
|
||||||
|
|
||||||
Genode::Lock event_lock;
|
Genode::Mutex event_mutex;
|
||||||
Video video_events;
|
Video video_events;
|
||||||
|
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ extern "C" {
|
|||||||
// SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
|
// SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
|
||||||
}
|
}
|
||||||
|
|
||||||
Genode::Lock_guard<Genode::Lock> guard(event_lock);
|
Genode::Mutex::Guard guard(event_mutex);
|
||||||
|
|
||||||
if (video_events.resize_pending) {
|
if (video_events.resize_pending) {
|
||||||
video_events.resize_pending = false;
|
video_events.resize_pending = false;
|
||||||
|
|||||||
@@ -42,8 +42,8 @@
|
|||||||
extern Genode::Env &global_env();
|
extern Genode::Env &global_env();
|
||||||
extern Gui::Connection &global_gui();
|
extern Gui::Connection &global_gui();
|
||||||
|
|
||||||
extern Genode::Lock event_lock;
|
extern Genode::Mutex event_mutex;
|
||||||
extern Video video_events;
|
extern Video video_events;
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -69,7 +69,7 @@ extern "C" {
|
|||||||
|
|
||||||
void _handle_mode_change()
|
void _handle_mode_change()
|
||||||
{
|
{
|
||||||
Genode::Lock_guard<Genode::Lock> guard(event_lock);
|
Genode::Mutex::Guard guard(event_mutex);
|
||||||
|
|
||||||
Framebuffer::Mode mode = _gui.mode();
|
Framebuffer::Mode mode = _gui.mode();
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class Flif_capture::Encoder
|
|||||||
// TODO: reuse FLIF_IMAGE, do not reallocate
|
// TODO: reuse FLIF_IMAGE, do not reallocate
|
||||||
FLIF_IMAGE *_image = nullptr;
|
FLIF_IMAGE *_image = nullptr;
|
||||||
Semaphore _semaphore { };
|
Semaphore _semaphore { };
|
||||||
Lock _lock { Lock::LOCKED };
|
Mutex _mutex { };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -71,11 +71,13 @@ class Flif_capture::Encoder
|
|||||||
*/
|
*/
|
||||||
void entry()
|
void entry()
|
||||||
{
|
{
|
||||||
|
_mutex.acquire();
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
while (_image == nullptr) {
|
while (_image == nullptr) {
|
||||||
_lock.unlock();
|
_mutex.release();
|
||||||
_semaphore.down();
|
_semaphore.down();
|
||||||
_lock.lock();
|
_mutex.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
char filename[32] { '\0' };
|
char filename[32] { '\0' };
|
||||||
@@ -119,7 +121,7 @@ class Flif_capture::Encoder
|
|||||||
if (_image != nullptr)
|
if (_image != nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Lock::Guard guard(_lock);
|
Mutex::Guard guard(_mutex);
|
||||||
|
|
||||||
/* TODO: attach/detach each capture? */
|
/* TODO: attach/detach each capture? */
|
||||||
Genode::Attached_dataspace fb_ds(_env.rm(), fb_cap);
|
Genode::Attached_dataspace fb_ds(_env.rm(), fb_cap);
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <file_system/node.h>
|
#include <file_system/node.h>
|
||||||
#include <base/lock.h>
|
|
||||||
#include <base/signal.h>
|
#include <base/signal.h>
|
||||||
#include <os/path.h>
|
#include <os/path.h>
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ extern "C" void data_cb(void *arg, struct udp_pcb *pcb, struct pbuf *p,
|
|||||||
class Tftp_rom::Session_component :
|
class Tftp_rom::Session_component :
|
||||||
public Genode::Rpc_object<Genode::Rom_session>,
|
public Genode::Rpc_object<Genode::Rom_session>,
|
||||||
public Session_list::Element,
|
public Session_list::Element,
|
||||||
Genode::Lock
|
Genode::Blockade
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ class Tftp_rom::Session_component :
|
|||||||
|
|
||||||
inline void finalize()
|
inline void finalize()
|
||||||
{
|
{
|
||||||
unlock();
|
wakeup();
|
||||||
_ack_timeout = 0;
|
_ack_timeout = 0;
|
||||||
if (_chain_head != NULL) {
|
if (_chain_head != NULL) {
|
||||||
pbuf_free(_chain_head);
|
pbuf_free(_chain_head);
|
||||||
@@ -132,7 +132,6 @@ class Tftp_rom::Session_component :
|
|||||||
unsigned long now,
|
unsigned long now,
|
||||||
unsigned timeout)
|
unsigned timeout)
|
||||||
:
|
:
|
||||||
Lock(LOCKED),
|
|
||||||
_env(env),
|
_env(env),
|
||||||
_filename(namestr),
|
_filename(namestr),
|
||||||
_pcb(udp_new()),
|
_pcb(udp_new()),
|
||||||
@@ -309,7 +308,7 @@ class Tftp_rom::Session_component :
|
|||||||
|
|
||||||
Rom_dataspace_capability dataspace() override
|
Rom_dataspace_capability dataspace() override
|
||||||
{
|
{
|
||||||
if (!done()) lock();
|
if (!done()) block();
|
||||||
|
|
||||||
Dataspace_capability ds = _dataspace;
|
Dataspace_capability ds = _dataspace;
|
||||||
return static_cap_cast<Genode::Rom_dataspace>(ds);
|
return static_cap_cast<Genode::Rom_dataspace>(ds);
|
||||||
@@ -370,7 +369,7 @@ class Tftp_rom::Root : public Genode::Root_component<Session_component>
|
|||||||
*/
|
*/
|
||||||
Lwip::Nic_netif _netif { _env, *md_alloc(), _config_rom.xml() };
|
Lwip::Nic_netif _netif { _env, *md_alloc(), _config_rom.xml() };
|
||||||
|
|
||||||
class Timeout_dispatcher : Genode::Thread, Genode::Lock
|
class Timeout_dispatcher : Genode::Thread, Genode::Mutex
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@@ -390,7 +389,7 @@ class Tftp_rom::Root : public Genode::Root_component<Session_component>
|
|||||||
ctx == &_sig_ctx;
|
ctx == &_sig_ctx;
|
||||||
ctx = _sig_rec.wait_for_signal().context())
|
ctx = _sig_rec.wait_for_signal().context())
|
||||||
{
|
{
|
||||||
Lock::Guard(*this);
|
Mutex::Guard guard(*this);
|
||||||
|
|
||||||
Session_component *session = _sessions.first();
|
Session_component *session = _sessions.first();
|
||||||
if (!session) {
|
if (!session) {
|
||||||
@@ -439,7 +438,7 @@ class Tftp_rom::Root : public Genode::Root_component<Session_component>
|
|||||||
|
|
||||||
void insert(Session_component *session)
|
void insert(Session_component *session)
|
||||||
{
|
{
|
||||||
Lock::Guard(*this);
|
Mutex::Guard guard(*this);
|
||||||
|
|
||||||
if (!_sessions.first())
|
if (!_sessions.first())
|
||||||
_timer.sigh(_sig_cap);
|
_timer.sigh(_sig_cap);
|
||||||
@@ -449,7 +448,7 @@ class Tftp_rom::Root : public Genode::Root_component<Session_component>
|
|||||||
|
|
||||||
void remove(Session_component *session)
|
void remove(Session_component *session)
|
||||||
{
|
{
|
||||||
Lock::Guard(*this);
|
Mutex::Guard guard(*this);
|
||||||
|
|
||||||
_sessions.remove(session);
|
_sessions.remove(session);
|
||||||
/* timer will be stopped at the next signal */
|
/* timer will be stopped at the next signal */
|
||||||
|
|||||||
Reference in New Issue
Block a user