Merge lp:~sforshee/powerd/add-name-arg into lp:powerd

Proposed by Seth Forshee
Status: Merged
Approved by: Matt Fischer
Approved revision: 77
Merged at revision: 77
Proposed branch: lp:~sforshee/powerd/add-name-arg
Merge into: lp:powerd
Diff against target: 624 lines (+101/-92)
9 files modified
cli/client-test.c (+3/-3)
cli/powerd-cli.c (+50/-40)
cli/powerd-cli.h (+1/-1)
data/com.canonical.powerd.xml (+4/-2)
src/display-request.c (+16/-19)
src/display.c (+2/-1)
src/power-request.c (+14/-18)
src/powerd-internal.h (+7/-5)
src/powerd.cpp (+4/-3)
To merge this branch: bzr merge lp:~sforshee/powerd/add-name-arg
Reviewer Review Type Date Requested Status
Matt Fischer (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+177421@code.launchpad.net

Commit message

Add "name" argument to dbus request APIs to help in debugging power problems

Description of the change

Add "name" argument to dbus request APIs to help in debugging power problems

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Matt Fischer (mfisch) wrote :

434 - if (req->owner)
435 - g_free((gpointer)req->owner);
436 + g_free((gpointer)req->name);
437 + g_free((gpointer)req->owner);

546 - if (sr->owner) {
547 - g_free(sr->owner);
548 - sr->owner = NULL;
549 - }
550 + g_free((gpointer)sr->name);
551 + g_free((gpointer)sr->owner);

Why remove the check and set to NULL?

Also should we modify the tests to ensure a name and owner are set? I assume it's impossible not to be, but it does help validate that list*Requests is working.

review: Needs Information
Revision history for this message
Seth Forshee (sforshee) wrote :

On Mon, Jul 29, 2013 at 07:04:29PM -0000, Matthew Fischer wrote:
> Review: Needs Information
>
> 434 - if (req->owner)
> 435 - g_free((gpointer)req->owner);
> 436 + g_free((gpointer)req->name);
> 437 + g_free((gpointer)req->owner);
>
> 546 - if (sr->owner) {
> 547 - g_free(sr->owner);
> 548 - sr->owner = NULL;
> 549 - }
> 550 + g_free((gpointer)sr->name);
> 551 + g_free((gpointer)sr->owner);
>
> Why remove the check and set to NULL?

Because it should never be null. We either strdup the dbus owner string
or else strdup a hard-coded "internal" string.

sr is free right after freeing the strings, so setting to NULL is
unnecessary.

> Also should we modify the tests to ensure a name and owner are set? I assume it's impossible not to be, but it does help validate that list*Requests is working.

We can't make a test to set owner to NULL, as the owner string isn't
passed as an argument over the dbus API.

I tried adding a test with name == NULL, but it doesn't work. I get the
output below. Rather than getting NULL, handle_request_sys_state() gets
a pointer to a string which contains "[Invalid UTF-8]". So I'm not
really sure how to test it.

Test: requestSysState(NULL, POWERD_SYS_STATE_ACTIVE, &cookie) == FALSE

(process:2526): GLib-CRITICAL **: g_variant_new_string: assertion
'string != NULL' failed
    result: FAILED

Revision history for this message
Matt Fischer (mfisch) wrote :

Approve

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'cli/client-test.c'
--- cli/client-test.c 2013-07-24 20:02:49 +0000
+++ cli/client-test.c 2013-07-29 16:08:44 +0000
@@ -174,7 +174,7 @@
174 test_data.ack_delay = 0;174 test_data.ack_delay = 0;
175 reset_test_state();175 reset_test_state();
176 test_data.ack_timeout_id = g_timeout_add(5000, ack_timeout_handler, NULL);176 test_data.ack_timeout_id = g_timeout_add(5000, ack_timeout_handler, NULL);
177 requestSysState(test_data.state, &test_data.cookie);177 requestSysState("ack-test", test_data.state, &test_data.cookie);
178 return FALSE;178 return FALSE;
179}179}
180180
@@ -207,7 +207,7 @@
207 test_data.state = POWERD_SYS_STATE_ACTIVE;207 test_data.state = POWERD_SYS_STATE_ACTIVE;
208 test_data.ack_delay = -1;208 test_data.ack_delay = -1;
209 test_data.ack_timeout_id = g_timeout_add(5000, ack_timeout_handler, NULL);209 test_data.ack_timeout_id = g_timeout_add(5000, ack_timeout_handler, NULL);
210 requestSysState(test_data.state, &test_data.cookie);210 requestSysState("no-ack-test", test_data.state, &test_data.cookie);
211 return FALSE;211 return FALSE;
212}212}
213213
@@ -231,7 +231,7 @@
231 test_data.state = POWERD_SYS_STATE_SUSPEND;231 test_data.state = POWERD_SYS_STATE_SUSPEND;
232 test_data.ack_delay = 0;232 test_data.ack_delay = 0;
233 test_data.ack_timeout_id = g_timeout_add(5000, ack_timeout_handler, NULL);233 test_data.ack_timeout_id = g_timeout_add(5000, ack_timeout_handler, NULL);
234 requestSysState(POWERD_SYS_STATE_ACTIVE, &test_data.cookie);234 requestSysState("bad-ack-test", POWERD_SYS_STATE_ACTIVE, &test_data.cookie);
235 return FALSE;235 return FALSE;
236}236}
237237
238238
=== modified file 'cli/powerd-cli.c'
--- cli/powerd-cli.c 2013-07-23 20:43:37 +0000
+++ cli/powerd-cli.c 2013-07-29 16:08:44 +0000
@@ -45,12 +45,14 @@
45const char *powerd_cli_bus_name;45const char *powerd_cli_bus_name;
4646
47struct PublicSysRequest {47struct PublicSysRequest {
48 const gchar *owner;48 const char *name;
49 const char *owner;
49 int state;50 int state;
50};51};
5152
52struct PublicDispRequest {53struct PublicDispRequest {
53 const gchar *owner;54 const char *name;
55 const char *owner;
54 enum powerd_display_state state;56 enum powerd_display_state state;
55 guint32 flags;57 guint32 flags;
56};58};
@@ -93,7 +95,7 @@
93}95}
9496
95gboolean97gboolean
96requestSysState(int state,98requestSysState(const char *name, int state,
97 powerd_cookie_t *cookie)99 powerd_cookie_t *cookie)
98{100{
99 GVariant *ret = NULL;101 GVariant *ret = NULL;
@@ -108,7 +110,7 @@
108110
109 ret = g_dbus_proxy_call_sync(powerd_proxy,111 ret = g_dbus_proxy_call_sync(powerd_proxy,
110 "requestSysState",112 "requestSysState",
111 g_variant_new("(i)", state),113 g_variant_new("(si)", name, state),
112 G_DBUS_CALL_FLAGS_NONE,114 G_DBUS_CALL_FLAGS_NONE,
113 -1,115 -1,
114 NULL,116 NULL,
@@ -133,7 +135,7 @@
133}135}
134136
135static gboolean137static gboolean
136requestDisplayState(struct PublicDispRequest pdr,138requestDisplayState(struct PublicDispRequest pdr, const char *name,
137 powerd_cookie_t *cookie)139 powerd_cookie_t *cookie)
138{140{
139 GVariant *ret = NULL;141 GVariant *ret = NULL;
@@ -148,7 +150,7 @@
148150
149 ret = g_dbus_proxy_call_sync(powerd_proxy,151 ret = g_dbus_proxy_call_sync(powerd_proxy,
150 "requestDisplayState",152 "requestDisplayState",
151 g_variant_new("(iu)", pdr.state, pdr.flags),153 g_variant_new("(siu)", name, pdr.state, pdr.flags),
152 G_DBUS_CALL_FLAGS_NONE,154 G_DBUS_CALL_FLAGS_NONE,
153 -1,155 -1,
154 NULL,156 NULL,
@@ -193,7 +195,7 @@
193 NULL,195 NULL,
194 &error);196 &error);
195 if (!ret) {197 if (!ret) {
196 cli_warn("requestDisplayState failed: %s", error->message);198 cli_warn("updateDisplayState failed: %s", error->message);
197 g_error_free(error);199 g_error_free(error);
198 return FALSE;200 return FALSE;
199 }201 }
@@ -223,10 +225,11 @@
223 g_error_free(error);225 g_error_free(error);
224 }226 }
225 else {227 else {
226 g_variant_get(ret, "(a(si))", &iter);228 g_variant_get(ret, "(a(ssi))", &iter);
227 while ((item = g_variant_iter_next_value (iter))) {229 while ((item = g_variant_iter_next_value (iter))) {
228 g_variant_get_child (item, 0, "s", &psr.owner);230 g_variant_get_child (item, 0, "s", &psr.name);
229 g_variant_get_child (item, 1, "i", &psr.state);231 g_variant_get_child (item, 1, "s", &psr.owner);
232 g_variant_get_child (item, 2, "i", &psr.state);
230 g_array_append_val(retarray, psr);233 g_array_append_val(retarray, psr);
231 g_variant_unref(item);234 g_variant_unref(item);
232 }235 }
@@ -246,7 +249,8 @@
246 } else {249 } else {
247 for (i = 0; i < requests->len; i++) {250 for (i = 0; i < requests->len; i++) {
248 psr = &g_array_index(requests, struct PublicSysRequest, i);251 psr = &g_array_index(requests, struct PublicSysRequest, i);
249 printf(" Owner: %s, State: %d\n", psr->owner, psr->state);252 printf(" Name: %s, Owner: %s, State: %d\n", psr->name,
253 psr->owner, psr->state);
250 }254 }
251 }255 }
252}256}
@@ -272,11 +276,12 @@
272 g_error_free(error);276 g_error_free(error);
273 }277 }
274 else {278 else {
275 g_variant_get(ret, "(a(siu))", &iter);279 g_variant_get(ret, "(a(ssiu))", &iter);
276 while ((item = g_variant_iter_next_value (iter))) {280 while ((item = g_variant_iter_next_value (iter))) {
277 g_variant_get_child(item, 0, "s", &pdr.owner);281 g_variant_get_child(item, 0, "s", &pdr.name);
278 g_variant_get_child(item, 1, "i", &pdr.state);282 g_variant_get_child(item, 1, "s", &pdr.owner);
279 g_variant_get_child(item, 2, "u", &pdr.flags);283 g_variant_get_child(item, 2, "i", &pdr.state);
284 g_variant_get_child(item, 3, "u", &pdr.flags);
280 g_array_append_val(retarray, pdr);285 g_array_append_val(retarray, pdr);
281 g_variant_unref(item);286 g_variant_unref(item);
282 }287 }
@@ -296,8 +301,8 @@
296 } else {301 } else {
297 for (i = 0; i < requests->len; i++) {302 for (i = 0; i < requests->len; i++) {
298 pdr = &g_array_index(requests, struct PublicDispRequest, i);303 pdr = &g_array_index(requests, struct PublicDispRequest, i);
299 printf(" Owner: %s, State: %d, Flags: %#08x\n",304 printf(" Name: %s, Owner: %s, State: %d, Flags: %#08x\n",
300 pdr->owner, pdr->state, pdr->flags);305 pdr->name, pdr->owner, pdr->state, pdr->flags);
301 }306 }
302 }307 }
303}308}
@@ -436,7 +441,7 @@
436 main_loop = g_main_loop_new (NULL, FALSE);441 main_loop = g_main_loop_new (NULL, FALSE);
437442
438 // Hold active state request as long we're running tests443 // Hold active state request as long we're running tests
439 requestSysState(POWERD_SYS_STATE_ACTIVE, &main_cookie);444 requestSysState("main-req", POWERD_SYS_STATE_ACTIVE, &main_cookie);
440445
441 ret = g_spawn_async_with_pipes(NULL, argv, NULL,446 ret = g_spawn_async_with_pipes(NULL, argv, NULL,
442 G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD,447 G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD,
@@ -466,10 +471,13 @@
466 silence_errors(TRUE);471 silence_errors(TRUE);
467472
468 // Hold active state request as long we're running tests473 // Hold active state request as long we're running tests
469 requestSysState(POWERD_SYS_STATE_ACTIVE, &main_cookie);474 requestSysState("main-req", POWERD_SYS_STATE_ACTIVE, &main_cookie);
470475
471 for (i = 0; i < TEST_NUM_SYS_REQUESTS; i++)476 for (i = 0; i < TEST_NUM_SYS_REQUESTS; i++) {
472 do_test(requestSysState(POWERD_SYS_STATE_ACTIVE, &cookies[i]) == TRUE);477 char name[16];
478 snprintf(name, sizeof(name), "test-cookie-%d", i);
479 do_test(requestSysState(name, POWERD_SYS_STATE_ACTIVE, &cookies[i]) == TRUE);
480 }
473481
474 // Make sure we have at least NUM_REQUESTS + 1482 // Make sure we have at least NUM_REQUESTS + 1
475 requests = listSysRequests();483 requests = listSysRequests();
@@ -501,11 +509,11 @@
501 g_array_free(requests, TRUE);509 g_array_free(requests, TRUE);
502510
503 //cannot request the suspend state, this will fail511 //cannot request the suspend state, this will fail
504 do_test(requestSysState(POWERD_SYS_STATE_SUSPEND, &cookie) == FALSE);512 do_test(requestSysState("test-cookie", POWERD_SYS_STATE_SUSPEND, &cookie) == FALSE);
505 //invalid values513 //invalid values
506 do_test(requestSysState(-1, &cookie) == FALSE);514 do_test(requestSysState("test-cookie", -1, &cookie) == FALSE);
507 do_test(requestSysState(POWERD_NUM_POWER_STATES, &cookie) == FALSE);515 do_test(requestSysState("test-cookie", POWERD_NUM_POWER_STATES, &cookie) == FALSE);
508 do_test(requestSysState(POWERD_NUM_POWER_STATES+1, &cookie) == FALSE);516 do_test(requestSysState("test-cookie", POWERD_NUM_POWER_STATES+1, &cookie) == FALSE);
509517
510 //cleanup518 //cleanup
511 do_test(clearSysState(main_cookie) == TRUE);519 do_test(clearSysState(main_cookie) == TRUE);
@@ -527,15 +535,17 @@
527 silence_errors(TRUE);535 silence_errors(TRUE);
528536
529 // Hold active state request as long we're running tests537 // Hold active state request as long we're running tests
530 requestSysState(POWERD_SYS_STATE_ACTIVE, &main_cookie);538 requestSysState("main-req", POWERD_SYS_STATE_ACTIVE, &main_cookie);
531539
532 for (i = 0; i < TEST_NUM_DISP_REQUESTS; i++) {540 for (i = 0; i < TEST_NUM_DISP_REQUESTS; i++) {
541 char name[16];
542 snprintf(name, sizeof(name), "disp-test-%d", i);
533 pdr.state = state++;543 pdr.state = state++;
534 pdr.flags = 0;544 pdr.flags = 0;
535 if (bright) {545 if (bright) {
536 pdr.flags |= POWERD_DISPLAY_FLAG_BRIGHT;546 pdr.flags |= POWERD_DISPLAY_FLAG_BRIGHT;
537 }547 }
538 do_test(requestDisplayState(pdr, &cookies[i]) == TRUE);548 do_test(requestDisplayState(pdr, name, &cookies[i]) == TRUE);
539 if (state >= POWERD_NUM_DISPLAY_STATES) {549 if (state >= POWERD_NUM_DISPLAY_STATES) {
540 state = 0;550 state = 0;
541 }551 }
@@ -567,19 +577,19 @@
567577
568 //invalid values578 //invalid values
569 pdr.state = -1;579 pdr.state = -1;
570 do_test(requestDisplayState(pdr, &cookie) == FALSE);580 do_test(requestDisplayState(pdr, "disp-test", &cookie) == FALSE);
571581
572 pdr.state = POWERD_NUM_DISPLAY_STATES;582 pdr.state = POWERD_NUM_DISPLAY_STATES;
573 do_test(requestDisplayState(pdr, &cookie) == FALSE);583 do_test(requestDisplayState(pdr, "disp-test", &cookie) == FALSE);
574584
575 pdr.state = POWERD_DISPLAY_STATE_ON;585 pdr.state = POWERD_DISPLAY_STATE_ON;
576 pdr.flags = 0xdeadbeef;586 pdr.flags = 0xdeadbeef;
577 do_test(requestDisplayState(pdr, &cookie) == FALSE);587 do_test(requestDisplayState(pdr, "disp-test", &cookie) == FALSE);
578588
579 // updateDisplayState tests589 // updateDisplayState tests
580 pdr.state = POWERD_DISPLAY_STATE_ON;590 pdr.state = POWERD_DISPLAY_STATE_ON;
581 pdr.flags = 0;591 pdr.flags = 0;
582 do_test(requestDisplayState(pdr, &cookie) == TRUE);592 do_test(requestDisplayState(pdr, "disp-test", &cookie) == TRUE);
583593
584 // update with same state should be okay594 // update with same state should be okay
585 do_test(updateDisplayState(pdr, cookie) == TRUE);595 do_test(updateDisplayState(pdr, cookie) == TRUE);
@@ -798,12 +808,12 @@
798 g_array_free(requests, TRUE);808 g_array_free(requests, TRUE);
799 }809 }
800 else if (!strcmp(argv[1],"active-nc")) {810 else if (!strcmp(argv[1],"active-nc")) {
801 requestSysState(POWERD_SYS_STATE_ACTIVE,&cookie);811 requestSysState("active-nc", POWERD_SYS_STATE_ACTIVE,&cookie);
802 printf("Power State requested, cookie is %s\n", cookie);812 printf("Power State requested, cookie is %s\n", cookie);
803 return 0;813 return 0;
804 }814 }
805 else if (!strcmp(argv[1],"active")) {815 else if (!strcmp(argv[1],"active")) {
806 requestSysState(POWERD_SYS_STATE_ACTIVE,&cookie);816 requestSysState("active", POWERD_SYS_STATE_ACTIVE,&cookie);
807 printf("Power State requested, cookie is %s.\nPress ctrl-c to exit.\n",817 printf("Power State requested, cookie is %s.\nPress ctrl-c to exit.\n",
808 cookie);818 cookie);
809 pause(); /* wait for SIGINT */819 pause(); /* wait for SIGINT */
@@ -820,7 +830,7 @@
820 usage(argv[0]);830 usage(argv[0]);
821 return -1;831 return -1;
822 }832 }
823 requestDisplayState(pdr,&cookie);833 requestDisplayState(pdr, "disp-test", &cookie);
824 printf("Display State requested, cookie is %s.\nPress ctrl-c to exit.\n",834 printf("Display State requested, cookie is %s.\nPress ctrl-c to exit.\n",
825 cookie);835 cookie);
826 pause(); /* wait for SIGINT */836 pause(); /* wait for SIGINT */
@@ -885,14 +895,14 @@
885 // This printf is read by the parent895 // This printf is read by the parent
886 printf("DBUSNAME: %s\n", bus_name);896 printf("DBUSNAME: %s\n", bus_name);
887 // Grab some requests so we can see that they get cleared later897 // Grab some requests so we can see that they get cleared later
888 requestSysState(POWERD_SYS_STATE_ACTIVE,&cookie);898 requestSysState("dbusnametest1", POWERD_SYS_STATE_ACTIVE,&cookie);
889 requestSysState(POWERD_SYS_STATE_ACTIVE,&cookie);899 requestSysState("dbusnametest2", POWERD_SYS_STATE_ACTIVE,&cookie);
890 requestSysState(POWERD_SYS_STATE_ACTIVE,&cookie);900 requestSysState("dbusnametest3", POWERD_SYS_STATE_ACTIVE,&cookie);
891 pdr.state = POWERD_DISPLAY_STATE_DONT_CARE;901 pdr.state = POWERD_DISPLAY_STATE_DONT_CARE;
892 pdr.flags = 0;902 pdr.flags = 0;
893 requestDisplayState(pdr, &cookie);903 requestDisplayState(pdr, "dbusnametest1", &cookie);
894 requestDisplayState(pdr, &cookie);904 requestDisplayState(pdr, "dbusnametest2", &cookie);
895 requestDisplayState(pdr, &cookie);905 requestDisplayState(pdr, "dbusnametest3", &cookie);
896 g_object_unref(bus);906 g_object_unref(bus);
897 // Exit here without cleanup907 // Exit here without cleanup
898 return 0;908 return 0;
899909
=== modified file 'cli/powerd-cli.h'
--- cli/powerd-cli.h 2013-07-23 20:43:37 +0000
+++ cli/powerd-cli.h 2013-07-29 16:08:44 +0000
@@ -35,7 +35,7 @@
35#define cli_warn(f, a...) do { if (!silent_errors) g_warning(f, ##a); } while (0)35#define cli_warn(f, a...) do { if (!silent_errors) g_warning(f, ##a); } while (0)
36#define cli_debug(f, a...) g_debug(f, ##a)36#define cli_debug(f, a...) g_debug(f, ##a)
3737
38gboolean requestSysState(int state, powerd_cookie_t *cookie);38gboolean requestSysState(const char *name, int state, powerd_cookie_t *cookie);
39gboolean clearSysState(powerd_cookie_t cookie);39gboolean clearSysState(powerd_cookie_t cookie);
40void powerd_cli_client_test(GDBusProxy *proxy);40void powerd_cli_client_test(GDBusProxy *proxy);
4141
4242
=== modified file 'data/com.canonical.powerd.xml'
--- data/com.canonical.powerd.xml 2013-07-24 14:39:08 +0000
+++ data/com.canonical.powerd.xml 2013-07-29 16:08:44 +0000
@@ -5,6 +5,7 @@
55
6 <!-- Functions -->6 <!-- Functions -->
7 <method name="requestSysState">7 <method name="requestSysState">
8 <arg type="s" name="name" direction="in" />
8 <arg type="i" name="state" direction="in" />9 <arg type="i" name="state" direction="in" />
9 <arg type="s" name="cookie" direction="out" />10 <arg type="s" name="cookie" direction="out" />
10 </method>11 </method>
@@ -14,6 +15,7 @@
14 </method>15 </method>
1516
16 <method name="requestDisplayState">17 <method name="requestDisplayState">
18 <arg type="s" name="name" direction="in" />
17 <arg type="i" name="state" direction="in" />19 <arg type="i" name="state" direction="in" />
18 <arg type="u" name="flags" direction="in" />20 <arg type="u" name="flags" direction="in" />
19 <arg type="s" name="cookie" direction="out" />21 <arg type="s" name="cookie" direction="out" />
@@ -43,11 +45,11 @@
4345
44 <!-- for debug/testing -->46 <!-- for debug/testing -->
45 <method name="listSysRequests">47 <method name="listSysRequests">
46 <arg type="a(si)" name="requestList" direction="out" />48 <arg type="a(ssi)" name="requestList" direction="out" />
47 </method>49 </method>
4850
49 <method name="listDisplayRequests">51 <method name="listDisplayRequests">
50 <arg type="a(siu)" name="requestList" direction="out" />52 <arg type="a(ssiu)" name="requestList" direction="out" />
51 </method>53 </method>
5254
53 <!-- Signals -->55 <!-- Signals -->
5456
=== modified file 'src/display-request.c'
--- src/display-request.c 2013-07-19 23:09:47 +0000
+++ src/display-request.c 2013-07-29 16:08:44 +0000
@@ -35,6 +35,7 @@
3535
36struct display_request_internal {36struct display_request_internal {
37 struct powerd_display_request req;37 struct powerd_display_request req;
38 const char *name;
38 const char *owner;39 const char *owner;
39};40};
4041
@@ -183,7 +184,7 @@
183 * the struct will be copied into internally-managed storage.184 * the struct will be copied into internally-managed storage.
184 */185 */
185static int __powerd_add_display_request(struct powerd_display_request *request,186static int __powerd_add_display_request(struct powerd_display_request *request,
186 const char *owner)187 const char *name, const char *owner)
187{188{
188 struct display_request_internal *hash_req;189 struct display_request_internal *hash_req;
189190
@@ -204,6 +205,7 @@
204 uuid_generate(request->cookie);205 uuid_generate(request->cookie);
205 hash_req = g_new(struct display_request_internal, 1);206 hash_req = g_new(struct display_request_internal, 1);
206 hash_req->req = *request;207 hash_req->req = *request;
208 hash_req->name = g_strdup(name);
207 hash_req->owner = g_strdup(owner);209 hash_req->owner = g_strdup(owner);
208 powerd_run_mainloop_sync(add_request_worker, hash_req);210 powerd_run_mainloop_sync(add_request_worker, hash_req);
209 return 0;211 return 0;
@@ -213,14 +215,14 @@
213 * @request need not refer to persistent memory, as the data from215 * @request need not refer to persistent memory, as the data from
214 * the struct will be copied into internally-managed storage.216 * the struct will be copied into internally-managed storage.
215 */217 */
216int powerd_add_display_request(struct powerd_display_request *request)218int powerd_add_display_request(struct powerd_display_request *request,
219 const char *name)
217{220{
218 if (!request) {221 if (!request || !name) {
219 powerd_warn("powerd_add_display_request() called with request == NULL");222 powerd_warn("powerd_add_display_request() called with invalid args");
220 return -EINVAL;223 return -EINVAL;
221 }224 }
222225 return __powerd_add_display_request(request, name, "internal");
223 return __powerd_add_display_request(request, "internal");
224}226}
225227
226static int update_request_worker(gpointer data)228static int update_request_worker(gpointer data)
@@ -255,7 +257,7 @@
255257
256gboolean handle_add_display_request(PowerdSource *obj,258gboolean handle_add_display_request(PowerdSource *obj,
257 GDBusMethodInvocation *invocation,259 GDBusMethodInvocation *invocation,
258 int state, guint32 flags)260 const char *name, int state, guint32 flags)
259{261{
260 struct powerd_display_request req;262 struct powerd_display_request req;
261 const char *owner;263 const char *owner;
@@ -271,7 +273,7 @@
271 req.state = state;273 req.state = state;
272 req.flags = flags;274 req.flags = flags;
273275
274 ret = __powerd_add_display_request(&req, owner);276 ret = __powerd_add_display_request(&req, name, owner);
275 if (ret) {277 if (ret) {
276 g_dbus_method_invocation_return_error(invocation, G_DBUS_ERROR,278 g_dbus_method_invocation_return_error(invocation, G_DBUS_ERROR,
277 G_DBUS_ERROR_INVALID_ARGS,279 G_DBUS_ERROR_INVALID_ARGS,
@@ -363,16 +365,11 @@
363 int count = 0;365 int count = 0;
364366
365 g_hash_table_iter_init(&iter, display_request_hash);367 g_hash_table_iter_init(&iter, display_request_hash);
366 powerd_debug("Display state requests:");
367 while (g_hash_table_iter_next(&iter, &key, &value)) {368 while (g_hash_table_iter_next(&iter, &key, &value)) {
368 unsigned char *uuid = key;
369 struct display_request_internal *ireq = value;369 struct display_request_internal *ireq = value;
370 struct powerd_display_request *req = &ireq->req;370 struct powerd_display_request *req = &ireq->req;
371 char cookie_str[UUID_STR_LEN];371 g_variant_builder_add(builder, "(ssiu)", ireq->name, ireq->owner,
372 uuid_unparse(uuid, cookie_str);372 req->state, req->flags);
373 powerd_debug(" owner: %s, cookie: %s, state: %d, flags: %#08x",
374 ireq->owner, cookie_str, req->state, req->flags);
375 g_variant_builder_add(builder, "(siu)", ireq->owner, req->state, req->flags);
376 count++;373 count++;
377 }374 }
378 return count;375 return count;
@@ -385,13 +382,13 @@
385 GVariantBuilder *builder;382 GVariantBuilder *builder;
386 int count;383 int count;
387384
388 builder = g_variant_builder_new(G_VARIANT_TYPE("a(siu)"));385 builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssiu)"));
389 count = build_display_request_list(builder);386 count = build_display_request_list(builder);
390 if (count > 0) {387 if (count > 0) {
391 list = g_variant_builder_end(builder);388 list = g_variant_builder_end(builder);
392 } else {389 } else {
393 g_variant_builder_clear(builder);390 g_variant_builder_clear(builder);
394 list = g_variant_new_array(G_VARIANT_TYPE("(siu)"), NULL, 0);391 list = g_variant_new_array(G_VARIANT_TYPE("(ssiu)"), NULL, 0);
395 }392 }
396393
397 tuple = g_variant_new_tuple(&list, 1);394 tuple = g_variant_new_tuple(&list, 1);
@@ -406,8 +403,8 @@
406{403{
407 struct display_request_internal *req = data;404 struct display_request_internal *req = data;
408405
409 if (req->owner)406 g_free((gpointer)req->name);
410 g_free((gpointer)req->owner);407 g_free((gpointer)req->owner);
411 g_free(req);408 g_free(req);
412}409}
413410
414411
=== modified file 'src/display.c'
--- src/display.c 2013-07-18 20:58:16 +0000
+++ src/display.c 2013-07-29 16:08:44 +0000
@@ -166,7 +166,8 @@
166 case POWERD_DISPLAY_STATE_ON:166 case POWERD_DISPLAY_STATE_ON:
167 if (actual_screen_state != POWERD_DISPLAY_STATE_ON) {167 if (actual_screen_state != POWERD_DISPLAY_STATE_ON) {
168 powerd_debug("Requesting active state internally");168 powerd_debug("Requesting active state internally");
169 ret = request_sys_state_internal(POWERD_SYS_STATE_ACTIVE,169 ret = request_sys_state_internal("display-request",
170 POWERD_SYS_STATE_ACTIVE,
170 &internal_request_cookie, NULL);171 &internal_request_cookie, NULL);
171 if (!ret)172 if (!ret)
172 powerd_warn("Request for active state failed");173 powerd_warn("Request for active state failed");
173174
=== modified file 'src/power-request.c'
--- src/power-request.c 2013-07-24 14:39:08 +0000
+++ src/power-request.c 2013-07-29 16:08:44 +0000
@@ -39,7 +39,8 @@
39#define NOTIFICATION_TIMEOUT_MSECS 200039#define NOTIFICATION_TIMEOUT_MSECS 2000
4040
41struct SysStateRequest {41struct SysStateRequest {
42 gchar *owner;42 const char *name;
43 const char *owner;
43 uuid_t cookie;44 uuid_t cookie;
44 enum SysPowerStates state;45 enum SysPowerStates state;
45};46};
@@ -170,16 +171,10 @@
170 guint count = 0;171 guint count = 0;
171172
172 g_hash_table_iter_init(&iter, state_request_hash);173 g_hash_table_iter_init(&iter, state_request_hash);
173 powerd_debug("System state requests:");
174 while (g_hash_table_iter_next(&iter, &key, &value)) {174 while (g_hash_table_iter_next(&iter, &key, &value)) {
175 unsigned char *uuid = key;
176 struct SysStateRequest *req = value;175 struct SysStateRequest *req = value;
177 char cookie_str[UUID_STR_LEN];176 g_variant_builder_add(builder, "(ssi)", req->name, req->owner,
178 uuid_unparse(uuid, cookie_str);177 req->state);
179 powerd_debug(" Owner: %s, Cookie: %s, State: %s (%d)",
180 req->owner, cookie_str, state_to_string(req->state),
181 req->state);
182 g_variant_builder_add(builder, "(si)", req->owner, req->state);
183 count++;178 count++;
184 }179 }
185 return count;180 return count;
@@ -193,14 +188,14 @@
193 GVariantBuilder *builder;188 GVariantBuilder *builder;
194 guint count = 0;189 guint count = 0;
195190
196 builder = g_variant_builder_new(G_VARIANT_TYPE("a(si)"));191 builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssi)"));
197 count = list_sys_requests_internal(builder);192 count = list_sys_requests_internal(builder);
198 if (count>0) {193 if (count>0) {
199 list = g_variant_builder_end(builder);194 list = g_variant_builder_end(builder);
200 }195 }
201 else {196 else {
202 g_variant_builder_clear(builder);197 g_variant_builder_clear(builder);
203 list = g_variant_new_array(G_VARIANT_TYPE("(si)"), NULL, 0);198 list = g_variant_new_array(G_VARIANT_TYPE("(ssi)"), NULL, 0);
204 }199 }
205 tuple = g_variant_new_tuple(&list,1);200 tuple = g_variant_new_tuple(&list,1);
206 g_dbus_method_invocation_return_value(invocation, tuple);201 g_dbus_method_invocation_return_value(invocation, tuple);
@@ -220,7 +215,8 @@
220215
221/* Note: owner is NULL for internal usage */216/* Note: owner is NULL for internal usage */
222gboolean217gboolean
223request_sys_state_internal(int state, uuid_t *cookie, const gchar *owner)218request_sys_state_internal(const char *name, int state, uuid_t *cookie,
219 const gchar *owner)
224{220{
225 struct SysStateRequest *sr = NULL;221 struct SysStateRequest *sr = NULL;
226222
@@ -236,6 +232,7 @@
236 }232 }
237233
238 sr = g_new(struct SysStateRequest, 1);234 sr = g_new(struct SysStateRequest, 1);
235 sr->name = g_strdup(name);
239 sr->state = (enum SysPowerStates)state;236 sr->state = (enum SysPowerStates)state;
240 if (owner) {237 if (owner) {
241 sr->owner = g_strdup(owner);238 sr->owner = g_strdup(owner);
@@ -252,7 +249,8 @@
252}249}
253250
254gboolean251gboolean
255handle_request_sys_state (PowerdSource *obj, GDBusMethodInvocation *invocation, int state)252handle_request_sys_state(PowerdSource *obj, GDBusMethodInvocation *invocation,
253 const char *name, int state)
256{254{
257 gboolean retval;255 gboolean retval;
258 const char *owner;256 const char *owner;
@@ -263,7 +261,7 @@
263 powerd_debug("handle_requestSysState from %s - %s (%d)", owner,261 powerd_debug("handle_requestSysState from %s - %s (%d)", owner,
264 state_to_string(state), state);262 state_to_string(state), state);
265263
266 retval = request_sys_state_internal(state, &cookie, owner);264 retval = request_sys_state_internal(name, state, &cookie, owner);
267 if (retval == TRUE) {265 if (retval == TRUE) {
268 powerd_debug("handle_requestSysState - SUCCESS");266 powerd_debug("handle_requestSysState - SUCCESS");
269 uuid_unparse(cookie, ext_cookie);267 uuid_unparse(cookie, ext_cookie);
@@ -620,10 +618,8 @@
620static void sys_state_request_destroy(gpointer data)618static void sys_state_request_destroy(gpointer data)
621{619{
622 struct SysStateRequest *sr = (struct SysStateRequest *)data;620 struct SysStateRequest *sr = (struct SysStateRequest *)data;
623 if (sr->owner) {621 g_free((gpointer)sr->name);
624 g_free(sr->owner);622 g_free((gpointer)sr->owner);
625 sr->owner = NULL;
626 }
627 g_free(sr);623 g_free(sr);
628}624}
629625
630626
=== modified file 'src/powerd-internal.h'
--- src/powerd-internal.h 2013-07-24 14:39:08 +0000
+++ src/powerd-internal.h 2013-07-29 16:08:44 +0000
@@ -74,14 +74,15 @@
74void powerd_display_clear_override(enum powerd_override_reason reason);74void powerd_display_clear_override(enum powerd_override_reason reason);
7575
76/* Display request functions */76/* Display request functions */
77int powerd_add_display_request(struct powerd_display_request *request);77int powerd_add_display_request(struct powerd_display_request *request,
78 const char *name);
78int powerd_update_display_request(struct powerd_display_request *request);79int powerd_update_display_request(struct powerd_display_request *request);
79int powerd_remove_display_request(uuid_t cookie);80int powerd_remove_display_request(uuid_t cookie);
80void display_request_init(void);81void display_request_init(void);
81void display_request_deinit(void);82void display_request_deinit(void);
82gboolean handle_add_display_request(PowerdSource *obj,83gboolean handle_add_display_request(PowerdSource *obj,
83 GDBusMethodInvocation *invocation,84 GDBusMethodInvocation *invocation,
84 int state, guint32 flags);85 const char *name, int state, guint32 flags);
85gboolean handle_update_display_request(PowerdSource *obj,86gboolean handle_update_display_request(PowerdSource *obj,
86 GDBusMethodInvocation *invocation,87 GDBusMethodInvocation *invocation,
87 const gchar *ext_cookie, int state,88 const gchar *ext_cookie, int state,
@@ -97,12 +98,13 @@
97gboolean handle_list_sys_requests(PowerdSource *obj,98gboolean handle_list_sys_requests(PowerdSource *obj,
98 GDBusMethodInvocation *invocation);99 GDBusMethodInvocation *invocation);
99gboolean handle_request_sys_state(PowerdSource *obj,100gboolean handle_request_sys_state(PowerdSource *obj,
100 GDBusMethodInvocation *invocation, int state);101 GDBusMethodInvocation *invocation,
102 const char *name, int state);
101gboolean handle_clear_sys_state(PowerdSource *obj,103gboolean handle_clear_sys_state(PowerdSource *obj,
102 GDBusMethodInvocation *invocation,104 GDBusMethodInvocation *invocation,
103 gchar *cookie);105 gchar *cookie);
104gboolean request_sys_state_internal(int state, uuid_t *cookie,106gboolean request_sys_state_internal(const char *name, int state,
105 const gchar *owner);107 uuid_t *cookie, const char *owner);
106gboolean clear_sys_state_internal(uuid_t cookie);108gboolean clear_sys_state_internal(uuid_t cookie);
107void power_request_transition_acked(void);109void power_request_transition_acked(void);
108void update_system_state(void);110void update_system_state(void);
109111
=== modified file 'src/powerd.cpp'
--- src/powerd.cpp 2013-07-23 14:42:07 +0000
+++ src/powerd.cpp 2013-07-29 16:08:44 +0000
@@ -217,7 +217,8 @@
217 activity_timer_req.flags |= POWERD_DISPLAY_FLAG_BRIGHT;217 activity_timer_req.flags |= POWERD_DISPLAY_FLAG_BRIGHT;
218218
219 if (activity_timer_screen_state == SCREEN_STATE_OFF)219 if (activity_timer_screen_state == SCREEN_STATE_OFF)
220 ret = powerd_add_display_request(&activity_timer_req);220 ret = powerd_add_display_request(&activity_timer_req,
221 "activity-timer");
221 else222 else
222 ret = powerd_update_display_request(&activity_timer_req);223 ret = powerd_update_display_request(&activity_timer_req);
223224
@@ -347,14 +348,14 @@
347 if (!strcmp(prop_value,"active")) {348 if (!strcmp(prop_value,"active")) {
348 if (!alerted) {349 if (!alerted) {
349 //call is active, enable sensor350 //call is active, enable sensor
350 if (powerd_add_display_request(&prox_sensor_req))351 if (powerd_add_display_request(&prox_sensor_req, "prox-sensor"))
351 powerd_warn("Request to use proximity sensor failed");352 powerd_warn("Request to use proximity sensor failed");
352 }353 }
353 }354 }
354 if (!strcmp(prop_value,"alerting")) {355 if (!strcmp(prop_value,"alerting")) {
355 alerted = TRUE;356 alerted = TRUE;
356 //call is altering, enable sensor357 //call is altering, enable sensor
357 if (powerd_add_display_request(&prox_sensor_req))358 if (powerd_add_display_request(&prox_sensor_req, "prox-sensor"))
358 powerd_warn("Request to use proximity sensor failed");359 powerd_warn("Request to use proximity sensor failed");
359 }360 }
360 else if (!strcmp(prop_value,"disconnected")) {361 else if (!strcmp(prop_value,"disconnected")) {

Subscribers

People subscribed via source and target branches