repair ecore mainloop dispatcher
This commit is contained in:
parent
cdedb019b0
commit
987d0f72a4
5 changed files with 66 additions and 76 deletions
3
README
3
README
|
@ -1,6 +1,7 @@
|
|||
Debugging
|
||||
---------
|
||||
To compile debugging code configure the project with the --enable-debug option. Then at runtime you may export the environment variable "DBUSXX_VERBOSE" to any value.
|
||||
To compile debugging code configure the project with the --enable-debug option.
|
||||
Then at runtime you may export the environment variable "DBUSXX_VERBOSE" to any value.
|
||||
|
||||
|
||||
BUGS:
|
||||
|
|
|
@ -69,16 +69,19 @@ private:
|
|||
|
||||
void toggle();
|
||||
|
||||
static Eina_Bool watch_handler_read ( void*, Ecore_Fd_Handler *fdh);
|
||||
|
||||
static Eina_Bool watch_handler_error ( void*, Ecore_Fd_Handler *fdh);
|
||||
static Eina_Bool watch_check ( void *data, Ecore_Fd_Handler *fdh);
|
||||
static Eina_Bool watch_prepare ( void *data, Ecore_Fd_Handler *fdh);
|
||||
static Eina_Bool watch_dispatch ( void *data, Ecore_Fd_Handler *fdh);
|
||||
|
||||
void _enable();
|
||||
|
||||
void _disable();
|
||||
|
||||
void data (Ecore::BusDispatcher *bd);
|
||||
|
||||
private:
|
||||
Ecore_Fd_Handler *fd_handler_read;
|
||||
Ecore_Fd_Handler *fd_handler;
|
||||
Ecore::BusDispatcher *_bd;
|
||||
|
||||
friend class BusDispatcher;
|
||||
};
|
||||
|
@ -86,9 +89,7 @@ friend class BusDispatcher;
|
|||
class DXXAPI BusDispatcher : public Dispatcher
|
||||
{
|
||||
public:
|
||||
BusDispatcher() {}
|
||||
|
||||
void attach();
|
||||
BusDispatcher();
|
||||
|
||||
void enter() {}
|
||||
|
||||
|
@ -102,8 +103,10 @@ public:
|
|||
|
||||
void rem_watch( Watch* );
|
||||
|
||||
private:
|
||||
static Eina_Bool dispatch ( void *data, Ecore_Fd_Handler *fdh);
|
||||
static Eina_Bool check ( void *data, Ecore_Fd_Handler *fdh);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
} /* namespace Ecore */
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
static void _debug_log_default(const char *format, ...)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
//#ifdef DEBUG
|
||||
|
||||
static int debug_env = getenv("DBUSXX_VERBOSE") ? 1 : 0;
|
||||
|
||||
|
@ -49,7 +49,7 @@ static void _debug_log_default(const char *format, ...)
|
|||
va_end(args);
|
||||
}
|
||||
|
||||
#endif//DEBUG
|
||||
//#endif//DEBUG
|
||||
}
|
||||
|
||||
DBus::LogFunction DBus::debug_log = _debug_log_default;
|
||||
|
|
|
@ -31,10 +31,15 @@
|
|||
|
||||
using namespace DBus;
|
||||
|
||||
Dispatcher *gdispatcher = NULL;
|
||||
|
||||
Ecore::BusTimeout::BusTimeout( Timeout::Internal* ti)
|
||||
: Timeout(ti)
|
||||
{
|
||||
_enable();
|
||||
if (Timeout::enabled())
|
||||
{
|
||||
_enable();
|
||||
}
|
||||
}
|
||||
|
||||
Ecore::BusTimeout::~BusTimeout()
|
||||
|
@ -46,8 +51,14 @@ void Ecore::BusTimeout::toggle()
|
|||
{
|
||||
debug_log("ecore: timeout %p toggled (%s)", this, Timeout::enabled() ? "on":"off");
|
||||
|
||||
if(Timeout::enabled()) _enable();
|
||||
else _disable();
|
||||
if(Timeout::enabled())
|
||||
{
|
||||
_enable();
|
||||
}
|
||||
else
|
||||
{
|
||||
_disable();
|
||||
}
|
||||
}
|
||||
|
||||
Eina_Bool Ecore::BusTimeout::timeout_handler( void *data )
|
||||
|
@ -58,7 +69,7 @@ Eina_Bool Ecore::BusTimeout::timeout_handler( void *data )
|
|||
|
||||
t->handle();
|
||||
|
||||
return 1; // 1 -> reshedule in ecore for next timer interval
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
||||
void Ecore::BusTimeout::_enable()
|
||||
|
@ -75,33 +86,9 @@ void Ecore::BusTimeout::_disable()
|
|||
ecore_timer_del (_etimer);
|
||||
}
|
||||
|
||||
/*static bool watch_prepare( int *timeout )
|
||||
{
|
||||
debug_log("ecore: watch_prepare");
|
||||
|
||||
*timeout = -1;
|
||||
return false;
|
||||
}*/
|
||||
|
||||
/*static bool watch_check( )
|
||||
{
|
||||
debug_log("ecore: watch_check");
|
||||
|
||||
return true;
|
||||
}*/
|
||||
|
||||
static bool watch_dispatch( void *data )
|
||||
{
|
||||
debug_log("ecore: watch_dispatch");
|
||||
|
||||
bool cb = true;
|
||||
DBus::default_dispatcher->dispatch_pending(); //TODO: won't work in case of multiple dispatchers
|
||||
return cb;
|
||||
}
|
||||
|
||||
Ecore::BusWatch::BusWatch( Watch::Internal* wi)
|
||||
: Watch(wi), fd_handler_read (NULL)
|
||||
{
|
||||
: Watch(wi), fd_handler (NULL), _bd (NULL)
|
||||
{
|
||||
if (Watch::enabled())
|
||||
{
|
||||
_enable();
|
||||
|
@ -121,58 +108,56 @@ void Ecore::BusWatch::toggle()
|
|||
else _disable();
|
||||
}
|
||||
|
||||
Eina_Bool Ecore::BusWatch::watch_handler_read( void *data, Ecore_Fd_Handler *fdh )
|
||||
Eina_Bool Ecore::BusWatch::watch_dispatch( void *data, Ecore_Fd_Handler *fdh )
|
||||
{
|
||||
Ecore::BusWatch* w = reinterpret_cast<Ecore::BusWatch*>(data);
|
||||
|
||||
debug_log("ecore: watch_handler_read");
|
||||
|
||||
int flags = DBUS_WATCH_READABLE;
|
||||
|
||||
watch_dispatch(NULL);
|
||||
debug_log("Ecore::BusWatch watch_handler_read");
|
||||
|
||||
w->handle(flags);
|
||||
int flags = flags;
|
||||
|
||||
if (w->flags() & DBUS_WATCH_READABLE)
|
||||
ecore_main_fd_handler_active_set(w->fd_handler, ECORE_FD_READ);
|
||||
if (w->flags() & DBUS_WATCH_WRITABLE)
|
||||
ecore_main_fd_handler_active_set(w->fd_handler, ECORE_FD_WRITE);
|
||||
|
||||
w->handle(flags);
|
||||
w->_bd->dispatch_pending();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*Eina_Bool Ecore::BusWatch::watch_handler_error( void *data, Ecore_Fd_Handler *fdh )
|
||||
{
|
||||
//Ecore::BusWatch* w = reinterpret_cast<Ecore::BusWatch*>(data);
|
||||
|
||||
debug_log("ecore: watch_handler_error");
|
||||
|
||||
//int flags = DBUS_WATCH_ERROR;
|
||||
|
||||
watch_dispatch(NULL);
|
||||
|
||||
return 1;
|
||||
}*/
|
||||
|
||||
void Ecore::BusWatch::_enable()
|
||||
{
|
||||
debug_log("Ecore::BusWatch::_enable()");
|
||||
|
||||
fd_handler_read = ecore_main_fd_handler_add (Watch::descriptor(),
|
||||
ECORE_FD_READ,
|
||||
watch_handler_read,
|
||||
this,
|
||||
NULL, NULL);
|
||||
|
||||
ecore_main_fd_handler_active_set(fd_handler_read, ECORE_FD_READ);
|
||||
|
||||
fd_handler = ecore_main_fd_handler_add (descriptor(),
|
||||
(Ecore_Fd_Handler_Flags) (ECORE_FD_READ | ECORE_FD_WRITE),
|
||||
watch_dispatch, this,
|
||||
NULL, NULL);
|
||||
}
|
||||
|
||||
void Ecore::BusWatch::_disable()
|
||||
{
|
||||
if (fd_handler_read)
|
||||
if (fd_handler)
|
||||
{
|
||||
ecore_main_fd_handler_del (fd_handler_read);
|
||||
fd_handler_read = NULL;
|
||||
ecore_main_fd_handler_del (fd_handler);
|
||||
fd_handler = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void Ecore::BusDispatcher::attach( )
|
||||
void Ecore::BusWatch::data (Ecore::BusDispatcher *bd)
|
||||
{
|
||||
_bd = bd;
|
||||
}
|
||||
|
||||
Ecore::BusDispatcher::BusDispatcher()
|
||||
{
|
||||
}
|
||||
|
||||
Eina_Bool Ecore::BusDispatcher::check ( void *data, Ecore_Fd_Handler *fdh)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
Timeout* Ecore::BusDispatcher::add_timeout( Timeout::Internal* wi )
|
||||
|
@ -193,7 +178,8 @@ void Ecore::BusDispatcher::rem_timeout( Timeout* t )
|
|||
|
||||
Watch* Ecore::BusDispatcher::add_watch( Watch::Internal* wi )
|
||||
{
|
||||
Watch* w = new Ecore::BusWatch(wi);
|
||||
Ecore::BusWatch* w = new Ecore::BusWatch(wi);
|
||||
w->data (this);
|
||||
|
||||
debug_log("ecore: added watch %p (%s) fd=%d flags=%d",
|
||||
w, w->enabled() ? "on":"off", w->descriptor(), w->flags()
|
||||
|
|
|
@ -87,7 +87,7 @@ struct BusSource
|
|||
|
||||
static gboolean watch_prepare(GSource *source, gint *timeout)
|
||||
{
|
||||
//debug_log("glib: watch_prepare");
|
||||
debug_log("glib: watch_prepare");
|
||||
|
||||
*timeout = -1;
|
||||
return FALSE;
|
||||
|
@ -95,7 +95,7 @@ static gboolean watch_prepare(GSource *source, gint *timeout)
|
|||
|
||||
static gboolean watch_check(GSource *source)
|
||||
{
|
||||
//debug_log("glib: watch_check");
|
||||
debug_log("glib: watch_check");
|
||||
|
||||
BusSource *io = (BusSource *)source;
|
||||
return io->poll.revents ? TRUE : FALSE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue