Merge lp:~paniemin/gwibber/gwibber into lp:gwibber

Proposed by Pauli
Status: Rejected
Rejected by: Robert Bruce Park
Proposed branch: lp:~paniemin/gwibber/gwibber
Merge into: lp:gwibber
Diff against target: 292 lines (+25/-41)
16 files modified
bin/gwibber-service (+1/-1)
data/Makefile.am (+1/-6)
data/com.Gwibber.Connection.service.in (+0/-3)
data/com.Gwibber.Messages.service.in (+0/-3)
data/com.Gwibber.Searches.service.in (+0/-3)
data/com.Gwibber.Streams.service.in (+0/-3)
data/com.Gwibber.URLShorten.service.in (+0/-3)
gwibber/lib/__init__.py (+1/-1)
gwibber/microblog/dispatcher.py (+6/-6)
gwibber/microblog/storage.py (+3/-3)
gwibber/microblog/util/__init__.py (+4/-4)
libgwibber/connection.vala (+2/-1)
libgwibber/messages.vala (+2/-1)
libgwibber/streams.vala (+2/-1)
libgwibber/urlshorten.vala (+2/-1)
tests/service-start.in (+1/-1)
To merge this branch: bzr merge lp:~paniemin/gwibber/gwibber
Reviewer Review Type Date Requested Status
Robert Bruce Park Disapprove
gwibber-committers Pending
Review via email: mp+143341@code.launchpad.net

Description of the change

Single patch to fix race condition in gwibber-service startup from dbus.

The issue in current system is that gwibber-service process is started for each bus name that is registered using .desktop files. To avoid the multi process situation gwibber-service has to use single busname for multiple paths and interfaces like patches changes the design.

This is fix for https://bugs.launchpad.net/gwibber/+bug/1090670

To post a comment you must log in.
Revision history for this message
Pauli (paniemin) wrote :

I forgot to mention but I only tested the change on top of 3.5.2 because any later versions require dependencies that I don't have easily installable. I should probably find some time to figure out how to pull those missing dependencies to my system. But conflicts between 3.5.2 and 3.6.0 were trivial to solve because they all were related to com.Gwibber.Accounts removal.

Revision history for this message
Robert Bruce Park (robru) wrote :

Thanks for taking the time to submit this patch, unfortunately Gwibber has gone through extensive changes recently and your patch no longer applies to the latest codebase.

Fortunately, the bug you were attempting to fix is no longer present in the current codebase. The gwibber-service backend has undergone an extensive overhaul and has been renamed to friends-service, which only uses one DBus interface. So there are no conflicts between different interfaces.

Please try out the latest Gwibber, I think you'll be quite pleased with what we've accomplished.

review: Disapprove

Unmerged revisions

1394. By Pauli

fix dbus service startup not to start multiple instances

gwibber-service process can be started multiple times by dbus for each
service file. If previous startup hadn't yet had time to register the
com.Gwibber.Connection second instance will be able start duplicate
instance.

To avoid dealing with the startup race condition we can use single
service file to provide all services making dbus handle correctly single
gwibber-service instance per user login.

Signed-off-by: Pauli Nieminen <email address hidden>

-------------- Ths line and the following will be ignored --------------

removed:
data/com.Gwibber.Connection.service.in
data/com.Gwibber.Messages.service.in
data/com.Gwibber.Searches.service.in
data/com.Gwibber.Streams.service.in
data/com.Gwibber.URLShorten.service.in
modified:
bin/gwibber-service
data/Makefile.am
gwibber/lib/__init__.py
gwibber/microblog/dispatcher.py
gwibber/microblog/storage.py
gwibber/microblog/util/__init__.py
libgwibber/connection.vala
libgwibber/messages.vala
libgwibber/streams.vala
libgwibber/urlshorten.vala
tests/service-start.in

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/gwibber-service'
2--- bin/gwibber-service 2012-02-13 20:39:02 +0000
3+++ bin/gwibber-service 2013-01-15 16:14:31 +0000
4@@ -61,7 +61,7 @@
5 from gwibber.microblog import dispatcher
6
7 # if gwibber-serivce is already running, don't start
8-if "com.Gwibber.Connection" in dbus.SessionBus().list_names():
9+if "com.Gwibber.Service" in dbus.SessionBus().list_names():
10 logger.info("Found gwibber-service already running, exiting")
11 quit()
12
13
14=== modified file 'data/Makefile.am'
15--- data/Makefile.am 2012-09-20 04:45:22 +0000
16+++ data/Makefile.am 2013-01-15 16:14:31 +0000
17@@ -10,12 +10,7 @@
18
19 dbus_servicesdir = $(datadir)/dbus-1/services
20 service_in_files = \
21- com.Gwibber.Connection.service.in \
22- com.Gwibber.Messages.service.in \
23- com.Gwibber.Searches.service.in \
24- com.Gwibber.Service.service.in \
25- com.Gwibber.Streams.service.in \
26- com.Gwibber.URLShorten.service.in
27+ com.Gwibber.Service.service.in
28
29 dbus_services_DATA = $(service_in_files:.service.in=.service)
30
31
32=== removed file 'data/com.Gwibber.Connection.service.in'
33--- data/com.Gwibber.Connection.service.in 2011-06-23 21:15:01 +0000
34+++ data/com.Gwibber.Connection.service.in 1970-01-01 00:00:00 +0000
35@@ -1,3 +0,0 @@
36-[D-BUS Service]
37-Name=com.Gwibber.Connection
38-Exec=@bindir@/gwibber-service
39
40=== removed file 'data/com.Gwibber.Messages.service.in'
41--- data/com.Gwibber.Messages.service.in 2011-06-23 21:15:01 +0000
42+++ data/com.Gwibber.Messages.service.in 1970-01-01 00:00:00 +0000
43@@ -1,3 +0,0 @@
44-[D-BUS Service]
45-Name=com.Gwibber.Messages
46-Exec=@bindir@/gwibber-service
47
48=== removed file 'data/com.Gwibber.Searches.service.in'
49--- data/com.Gwibber.Searches.service.in 2011-06-23 21:15:01 +0000
50+++ data/com.Gwibber.Searches.service.in 1970-01-01 00:00:00 +0000
51@@ -1,3 +0,0 @@
52-[D-BUS Service]
53-Name=com.Gwibber.Searches
54-Exec=@bindir@/gwibber-service
55
56=== removed file 'data/com.Gwibber.Streams.service.in'
57--- data/com.Gwibber.Streams.service.in 2011-06-23 21:15:01 +0000
58+++ data/com.Gwibber.Streams.service.in 1970-01-01 00:00:00 +0000
59@@ -1,3 +0,0 @@
60-[D-BUS Service]
61-Name=com.Gwibber.Streams
62-Exec=@bindir@/gwibber-service
63
64=== removed file 'data/com.Gwibber.URLShorten.service.in'
65--- data/com.Gwibber.URLShorten.service.in 2011-06-23 21:15:01 +0000
66+++ data/com.Gwibber.URLShorten.service.in 1970-01-01 00:00:00 +0000
67@@ -1,3 +0,0 @@
68-[D-BUS Service]
69-Name=com.Gwibber.URLShorten
70-Exec=@bindir@/gwibber-service
71
72=== modified file 'gwibber/lib/__init__.py'
73--- gwibber/lib/__init__.py 2010-10-06 23:33:22 +0000
74+++ gwibber/lib/__init__.py 2013-01-15 16:14:31 +0000
75@@ -15,7 +15,7 @@
76
77 def getbus(self, name):
78 obj = self.bus.get_object(
79- "com.Gwibber.%s" % name,
80+ "com.Gwibber.Service",
81 "/com/gwibber/%s" % name,
82 follow_name_owner_changes=True)
83
84
85=== modified file 'gwibber/microblog/dispatcher.py'
86--- gwibber/microblog/dispatcher.py 2012-10-04 16:15:03 +0000
87+++ gwibber/microblog/dispatcher.py 2013-01-15 16:14:31 +0000
88@@ -948,7 +948,7 @@
89
90 def __init__(self):
91 self.bus = dbus.SessionBus()
92- bus_name = dbus.service.BusName("com.Gwibber.Connection", bus=self.bus)
93+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
94 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
95
96 self.sysbus = dbus.SystemBus()
97@@ -1021,7 +1021,7 @@
98
99 def __init__(self):
100 self.bus = dbus.SessionBus()
101- bus_name = dbus.service.BusName("com.Gwibber.URLShorten", bus=self.bus)
102+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
103 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
104
105 @dbus.service.method("com.Gwibber.URLShorten", in_signature="s", out_signature="s")
106@@ -1031,7 +1031,7 @@
107 example:
108 import dbus
109 url = "http://www.example.com/this/is/a/long/url"
110- obj = dbus.SessionBus().get_object("com.Gwibber.URLShorten", "/com/gwibber/URLShorten")
111+ obj = dbus.SessionBus().get_object("com.Gwibber.Service", "/com/gwibber/URLShorten")
112 shortener = dbus.Interface(obj, "com.Gwibber.URLShorten")
113 short_url = shortener.Shorten(url)
114 """
115@@ -1055,7 +1055,7 @@
116
117 def __init__(self):
118 self.bus = dbus.SessionBus()
119- bus_name = dbus.service.BusName("com.Gwibber.Uploader", bus=self.bus)
120+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
121 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
122
123 @dbus.service.method("com.Gwibber.Uploader", in_signature="s", out_signature="")
124@@ -1065,7 +1065,7 @@
125 example:
126 import dbus
127 filepath = "/home/ken/Documents/awesomeimage.jpg"
128- obj = dbus.SessionBus().get_object("com.Gwibber.Uploader", "/com/gwibber/Uploader")
129+ obj = dbus.SessionBus().get_object("com.Gwibber.Service", "/com/gwibber/Uploader")
130 uploader = dbus.Interface(obj, "com.Gwibber.Uploader")
131
132 def done(path, url):
133@@ -1100,7 +1100,7 @@
134
135 def __init__(self):
136 self.bus = dbus.SessionBus()
137- bus_name = dbus.service.BusName("com.Gwibber.Translate", bus=self.bus)
138+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
139 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
140
141 @dbus.service.method("com.Gwibber.Translate", in_signature="sss", out_signature="s")
142
143=== modified file 'gwibber/microblog/storage.py'
144--- gwibber/microblog/storage.py 2012-06-13 12:08:07 +0000
145+++ gwibber/microblog/storage.py 2013-01-15 16:14:31 +0000
146@@ -16,7 +16,7 @@
147
148 def __init__(self, db):
149 self.bus = dbus.SessionBus()
150- bus_name = dbus.service.BusName("com.Gwibber.Messages", bus=self.bus)
151+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
152 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
153
154 self.db = db
155@@ -94,7 +94,7 @@
156
157 def __init__(self, db):
158 self.bus = dbus.SessionBus()
159- bus_name = dbus.service.BusName("com.Gwibber.Searches", bus=self.bus)
160+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
161 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
162 self.db = db
163
164@@ -159,7 +159,7 @@
165
166 def __init__(self, db):
167 self.bus = dbus.SessionBus()
168- bus_name = dbus.service.BusName("com.Gwibber.Streams", bus=self.bus)
169+ bus_name = dbus.service.BusName("com.Gwibber.Service", bus=self.bus)
170 dbus.service.Object.__init__(self, bus_name, self.__dbus_object_path__)
171 self.db = db
172
173
174=== modified file 'gwibber/microblog/util/__init__.py'
175--- gwibber/microblog/util/__init__.py 2012-05-23 14:02:10 +0000
176+++ gwibber/microblog/util/__init__.py 2013-01-15 16:14:31 +0000
177@@ -265,15 +265,15 @@
178 can_notify = False
179
180
181-def getbus(path, address="com.Gwibber"):
182+def getbus(path, interface="com.Gwibber"):
183 if not path.startswith("/"):
184 path = "/com/gwibber/%s" % path
185 if len(path.split('gwibber/')[1]) > 1:
186- address = "com.Gwibber.%s" % path.split('wibber/')[1]
187+ interface = "com.Gwibber.%s" % path.split('wibber/')[1]
188 bus = dbus.SessionBus()
189- obj = bus.get_object(address, path,
190+ obj = bus.get_object("com.Gwibber.Service", path,
191 follow_name_owner_changes = True)
192- return dbus.Interface(obj, address)
193+ return dbus.Interface(obj, interface)
194
195 def service_is_running(name):
196 return name in dbus.Interface(dbus.SessionBus().get_object(
197
198=== modified file 'libgwibber/connection.vala'
199--- libgwibber/connection.vala 2011-08-05 02:22:16 +0000
200+++ libgwibber/connection.vala 2013-01-15 16:14:31 +0000
201@@ -30,6 +30,7 @@
202 {
203 public class Connection : Object
204 {
205+ private const string service_name = "com.Gwibber.Service";
206 private const string conn_name = "com.Gwibber.Connection";
207 private const string conn_path = "/com/gwibber/Connection";
208
209@@ -62,7 +63,7 @@
210 try
211 {
212 conn_service = Bus.get_proxy_sync(BusType.SESSION,
213- conn_name,
214+ service_name,
215 conn_path);
216 utils = new Gwibber.Utils();
217 utils.setup(conn_name);
218
219=== modified file 'libgwibber/messages.vala'
220--- libgwibber/messages.vala 2011-08-05 02:22:16 +0000
221+++ libgwibber/messages.vala 2013-01-15 16:14:31 +0000
222@@ -30,6 +30,7 @@
223 {
224 public class Messages : Object
225 {
226+ private const string service_name = "com.Gwibber.Service";
227 private const string messages_name = "com.Gwibber.Messages";
228 private const string messages_path = "/com/gwibber/Messages";
229
230@@ -58,7 +59,7 @@
231 try
232 {
233 messages_service = Bus.get_proxy_sync(BusType.SESSION,
234- messages_name,
235+ service_name,
236 messages_path);
237 utils = new Gwibber.Utils();
238 utils.setup(messages_name);
239
240=== modified file 'libgwibber/streams.vala'
241--- libgwibber/streams.vala 2012-08-05 17:26:59 +0000
242+++ libgwibber/streams.vala 2013-01-15 16:14:31 +0000
243@@ -35,6 +35,7 @@
244 {
245 public class Streams : Object
246 {
247+ private const string service_name = "com.Gwibber.Service";
248 private const string streams_name = "com.Gwibber.Streams";
249 private const string streams_path = "/com/gwibber/Streams";
250
251@@ -100,7 +101,7 @@
252 try
253 {
254 streams_service = Bus.get_proxy_sync(BusType.SESSION,
255- streams_name,
256+ service_name,
257 streams_path);
258 utils = new Gwibber.Utils();
259 utils.setup(streams_name);
260
261=== modified file 'libgwibber/urlshorten.vala'
262--- libgwibber/urlshorten.vala 2011-08-05 02:22:16 +0000
263+++ libgwibber/urlshorten.vala 2013-01-15 16:14:31 +0000
264@@ -28,6 +28,7 @@
265 {
266 public class URLShorten : Object
267 {
268+ private const string service_name = "com.Gwibber.Service";
269 private const string url_name = "com.Gwibber.URLShorten";
270 private const string url_path = "/com/gwibber/URLShorten";
271
272@@ -47,7 +48,7 @@
273 try
274 {
275 url_service = Bus.get_proxy_sync(BusType.SESSION,
276- url_name,
277+ service_name,
278 url_path);
279 utils = new Gwibber.Utils();
280 utils.setup(url_name);
281
282=== modified file 'tests/service-start.in'
283--- tests/service-start.in 2012-02-10 21:54:30 +0000
284+++ tests/service-start.in 2013-01-15 16:14:31 +0000
285@@ -43,7 +43,7 @@
286
287 from gwibber.microblog import dispatcher
288
289-if "com.Gwibber.Connection" in dbus.SessionBus().list_names():
290+if "com.Gwibber.Service" in dbus.SessionBus().list_names():
291 logger.info("Found service already running, exiting")
292 quit()
293

Subscribers

People subscribed via source and target branches