Merge lp:~charlesk/indicator-datetime/lp-1424966-fix-ecanceled-errno-trunk-15.04 into lp:indicator-datetime/15.04

Proposed by Charles Kerr
Status: Merged
Approved by: Ted Gould
Approved revision: 400
Merged at revision: 402
Proposed branch: lp:~charlesk/indicator-datetime/lp-1424966-fix-ecanceled-errno-trunk-15.04
Merge into: lp:indicator-datetime/15.04
Diff against target: 97 lines (+35/-24)
1 file modified
src/clock-live.cpp (+35/-24)
To merge this branch: bzr merge lp:~charlesk/indicator-datetime/lp-1424966-fix-ecanceled-errno-trunk-15.04
Reviewer Review Type Date Requested Status
Ted Gould (community) Approve
Review via email: mp+251326@code.launchpad.net

Commit message

create a new timerfd each time we need to call timerfd_settime().

Description of the change

To post a comment you must log in.
Revision history for this message
Ted Gould (ted) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/clock-live.cpp'
--- src/clock-live.cpp 2015-02-12 23:03:38 +0000
+++ src/clock-live.cpp 2015-02-27 20:07:26 +0000
@@ -52,31 +52,13 @@
52 setter(m_timezone->timezone.get());52 setter(m_timezone->timezone.get());
53 }53 }
5454
55 m_timerfd = timerfd_create(CLOCK_REALTIME, 0);55 reset_timer();
56 if (m_timerfd == -1)
57 {
58 g_warning("unable to create realtime timer: %s", g_strerror(errno));
59 }
60 else
61 {
62 reset_timer();
63
64 m_timerfd_tag = g_unix_fd_add(m_timerfd,
65 (GIOCondition)(G_IO_IN|G_IO_HUP|G_IO_ERR),
66 on_timerfd_cond,
67 this);
68 }
69
70 refresh();56 refresh();
71 }57 }
7258
73 ~Impl()59 ~Impl()
74 {60 {
75 if (m_timerfd_tag != 0)61 unset_timer();
76 g_source_remove(m_timerfd_tag);
77
78 if (m_timerfd != -1)
79 close(m_timerfd);
8062
81 g_clear_pointer(&m_gtimezone, g_time_zone_unref);63 g_clear_pointer(&m_gtimezone, g_time_zone_unref);
82 }64 }
@@ -93,10 +75,33 @@
9375
94private:76private:
9577
78 void unset_timer()
79 {
80 if (m_timerfd_tag != 0)
81 {
82 g_source_remove(m_timerfd_tag);
83 m_timerfd_tag = 0;
84 }
85
86 if (m_timerfd != -1)
87 {
88 close(m_timerfd);
89 m_timerfd = -1;
90 }
91 }
92
96 void reset_timer()93 void reset_timer()
97 {94 {
95 // clear out any previous timer
96 unset_timer();
97
98 // create a new timer
99 m_timerfd = timerfd_create(CLOCK_REALTIME, 0);
100 if (m_timerfd == -1)
101 g_error("unable to create realtime timer: %s", g_strerror(errno));
102
103 // set args to fire at the beginning of the next minute...
98 struct itimerspec timerval;104 struct itimerspec timerval;
99 // set args to fire at the beginning of the next minute...
100 int flags = TFD_TIMER_ABSTIME;105 int flags = TFD_TIMER_ABSTIME;
101 auto now = g_date_time_new_now(m_gtimezone);106 auto now = g_date_time_new_now(m_gtimezone);
102 auto next = g_date_time_add_minutes(now, 1);107 auto next = g_date_time_add_minutes(now, 1);
@@ -115,6 +120,12 @@
115120
116 if (timerfd_settime(m_timerfd, flags, &timerval, NULL) == -1)121 if (timerfd_settime(m_timerfd, flags, &timerval, NULL) == -1)
117 g_error("timerfd_settime failed: %s", g_strerror(errno));122 g_error("timerfd_settime failed: %s", g_strerror(errno));
123
124 // listen for the changes/timers
125 m_timerfd_tag = g_unix_fd_add(m_timerfd,
126 (GIOCondition)(G_IO_IN|G_IO_HUP|G_IO_ERR),
127 on_timerfd_cond,
128 this);
118 }129 }
119130
120 static gboolean on_timerfd_cond (gint fd, GIOCondition cond, gpointer gself)131 static gboolean on_timerfd_cond (gint fd, GIOCondition cond, gpointer gself)
@@ -130,9 +141,9 @@
130 {141 {
131 auto now = g_date_time_new_now(self->m_gtimezone);142 auto now = g_date_time_new_now(self->m_gtimezone);
132 auto now_str = g_date_time_format(now, "%F %T");143 auto now_str = g_date_time_format(now, "%F %T");
133 g_message("%s triggered at %s.%06d by GIOCondition %d, read %zd bytes, found %zu interrupts",144 g_debug("%s triggered at %s.%06d by GIOCondition %d, read %zd bytes, found %zu interrupts",
134 G_STRFUNC, now_str, g_date_time_get_microsecond(now),145 G_STRFUNC, now_str, g_date_time_get_microsecond(now),
135 (int)cond, n_bytes, n_interrupts);146 (int)cond, n_bytes, n_interrupts);
136 g_free(now_str);147 g_free(now_str);
137 g_date_time_unref(now);148 g_date_time_unref(now);
138149

Subscribers

People subscribed via source and target branches