[Openais] [PATCH]: corosync/trunk: Add timer_expire_time_get to corosync api
Ryan O'Hara
rohara at redhat.com
Tue Feb 17 16:30:02 PST 2009
And this time I will actually attach the patch...
On Tue, Feb 17, 2009 at 06:26:34PM -0600, Ryan O'Hara wrote:
>
> This patch adds a new corosync API call, timer_expire_time_get.
>
> This call will return the absolute time representing the time that a
> timer (specified by handle) is due to expire.
>
-------------- next part --------------
Index: include/corosync/engine/coroapi.h
===================================================================
--- include/corosync/engine/coroapi.h (revision 1760)
+++ include/corosync/engine/coroapi.h (working copy)
@@ -376,6 +376,9 @@
unsigned long long (*timer_time_get) (void);
+ unsigned long long (*timer_expire_time_get) (
+ corosync_timer_handle_t timer_handle);
+
/*
* IPC APIs
*/
Index: exec/apidef.c
===================================================================
--- exec/apidef.c (revision 1760)
+++ exec/apidef.c (working copy)
@@ -72,6 +72,7 @@
.timer_add_absolute = corosync_timer_add_absolute,
.timer_delete = corosync_timer_delete,
.timer_time_get = corosync_timer_time_get,
+ .timer_expire_time_get = corosync_timer_expire_time_get,
.ipc_source_set = message_source_set,
.ipc_source_is_local = message_source_is_local,
.ipc_private_data_get = cs_conn_private_data_get,
Index: exec/tlist.h
===================================================================
--- exec/tlist.h (revision 1760)
+++ exec/tlist.h (working copy)
@@ -172,6 +172,13 @@
free (timer);
}
+static inline unsigned long long timerlist_expire_time (struct timerlist *timerlist, timer_handle timer_handle)
+{
+ struct timerlist_timer *timer = (struct timerlist_timer *)timer_handle;
+
+ return (timer->nano_from_epoch);
+}
+
static inline void timerlist_pre_dispatch (struct timerlist *timerlist, timer_handle timer_handle)
{
struct timerlist_timer *timer = (struct timerlist_timer *)timer_handle;
@@ -215,7 +222,6 @@
if (timer_from_list->nano_from_epoch < nano_from_epoch) {
return (0);
}
-
msec_duration_to_expire = ((timer_from_list->nano_from_epoch - nano_from_epoch) / 1000000ULL) +
(1000 / HZ);
Index: exec/timer.c
===================================================================
--- exec/timer.c (revision 1760)
+++ exec/timer.c (working copy)
@@ -267,3 +267,29 @@
{
return (timerlist_nano_from_epoch());
}
+
+unsigned long long corosync_timer_expire_time_get (
+ timer_handle timer_handle)
+{
+ int unlock;
+ unsigned long long expire;
+
+ if (timer_handle == 0) {
+ return (0);
+ }
+
+ if (pthread_equal (pthread_self(), expiry_thread) != 0) {
+ unlock = 0;
+ } else {
+ unlock = 1;
+ pthread_mutex_lock (&timer_mutex);
+ }
+
+ expire = timerlist_expire_time (&timers_timerlist, timer_handle);
+
+ if (unlock) {
+ pthread_mutex_unlock (&timer_mutex);
+ }
+
+ return (expire);
+}
Index: exec/timer.h
===================================================================
--- exec/timer.h (revision 1760)
+++ exec/timer.h (working copy)
@@ -63,4 +63,6 @@
extern unsigned long long corosync_timer_time_get (void);
+extern unsigned long long corosync_timer_expire_time_get (corosync_timer_handle timer_handle);
+
#endif /* TIMER_H_DEFINED */
More information about the Openais
mailing list