[rygel] ruih: Remove locking
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] ruih: Remove locking
- Date: Sat, 8 Nov 2014 12:24:53 +0000 (UTC)
commit f4f1ba6a658469bfb5cc6ba080116afc1976a71e
Author: Jens Georg <mail jensge org>
Date: Sun Oct 19 10:24:15 2014 +0200
ruih: Remove locking
get_compatible_uis () and set_ui_list () can never be called from different
threads. It is not possible to modify the UI list while querying it.
Signed-off-by: Jens Georg <mail jensge org>
src/librygel-ruih/rygel-ruih-servicemanager.vala | 243 +++++++++++-----------
1 files changed, 119 insertions(+), 124 deletions(-)
---
diff --git a/src/librygel-ruih/rygel-ruih-servicemanager.vala
b/src/librygel-ruih/rygel-ruih-servicemanager.vala
index d4777fd..6b85b1a 100644
--- a/src/librygel-ruih/rygel-ruih-servicemanager.vala
+++ b/src/librygel-ruih/rygel-ruih-servicemanager.vala
@@ -48,7 +48,6 @@ public class Rygel.RuihServiceManager : Object
private static string POST_RESULT = "</" + UILIST + ">\n";
private ArrayList<UIElem> ui_list;
- private Object object = null;
private static RuihServiceManager instance = null;
@@ -106,155 +105,151 @@ public class Rygel.RuihServiceManager : Object
}
public void set_ui_list (string ui_list_file_path) throws RuihServiceError {
- lock (object) {
- this.ui_list = new ArrayList<UIElem> ();
- // Empty internal data
- if (ui_list_file_path == null) {
- return;
- }
+ this.ui_list = new ArrayList<UIElem> ();
+ // Empty internal data
+ if (ui_list_file_path == null) {
+ return;
+ }
- Xml.Doc* doc = Parser.parse_file (ui_list_file_path);
- if (doc == null) {
- throw new RuihServiceError.OPERATION_REJECTED
- ("Unable to parse UI list file: " + ui_list_file_path);
- }
+ Xml.Doc* doc = Parser.parse_file (ui_list_file_path);
+ if (doc == null) {
+ throw new RuihServiceError.OPERATION_REJECTED
+ ("Unable to parse UI list file: " + ui_list_file_path);
+ }
- Xml.Node* ui_list_node = doc->get_root_element ();
- if (ui_list_node != null &&
- ui_list_node->name == UILIST)
+ Xml.Node* ui_list_node = doc->get_root_element ();
+ if (ui_list_node != null &&
+ ui_list_node->name == UILIST)
+ {
+ for (Xml.Node* child_node = ui_list_node->children;
+ child_node != null; child_node = child_node->next)
{
- for (Xml.Node* child_node = ui_list_node->children;
- child_node != null; child_node = child_node->next)
+ if (child_node->name == UI)
{
- if (child_node->name == UI)
- {
- this.ui_list.add (new UIElem (child_node));
- }
+ this.ui_list.add (new UIElem (child_node));
}
}
- delete doc;
}
+ delete doc;
}
public string get_compatible_uis (string deviceProfile, string filter)
- throws RuihServiceError {
- lock (object) {
- ArrayList<FilterEntry> filter_entries = new ArrayList<FilterEntry> ();
- Xml.Node* device_profile_node = null;
- Xml.Doc* doc = null;
- // Parse if there is device info
-
- if (deviceProfile != null && deviceProfile.length > 0) {
- doc = Parser.parse_memory (deviceProfile,
- deviceProfile.length);
- if (doc == null) {
- throw new RuihServiceError.OPERATION_REJECTED
- ("Unable to parse device profile data: " + deviceProfile);
- }
- device_profile_node = doc->get_root_element ();
+ throws RuihServiceError {
+ ArrayList<FilterEntry> filter_entries = new ArrayList<FilterEntry> ();
+ Xml.Node* device_profile_node = null;
+ Xml.Doc* doc = null;
+ // Parse if there is device info
+
+ if (deviceProfile != null && deviceProfile.length > 0) {
+ doc = Parser.parse_memory (deviceProfile,
+ deviceProfile.length);
+ if (doc == null) {
+ throw new RuihServiceError.OPERATION_REJECTED
+ ("Unable to parse device profile data: " + deviceProfile);
}
+ device_profile_node = doc->get_root_element ();
+ }
- // If inputDeviceProfile and filter are empty
- // just display all HTML5 UI elements.
- // This is a change from the UPNP-defined behavior
- if (device_profile_node == null && filter == "") {
- filter_entries.add (new FilterEntry (SHORT_NAME, "*HTML5*"));
- }
+ // If inputDeviceProfile and filter are empty
+ // just display all HTML5 UI elements.
+ // This is a change from the UPNP-defined behavior
+ if (device_profile_node == null && filter == "") {
+ filter_entries.add (new FilterEntry (SHORT_NAME, "*HTML5*"));
+ }
- // Parse device info to create protocols
- if (device_profile_node != null) {
- if (device_profile_node->name == DEVICEPROFILE) {
- for (Xml.Node* child_node = device_profile_node->children;
- child_node != null; child_node = child_node->next) {
- if (child_node->type == Xml.ElementType.TEXT_NODE) {
- // ignore text nodes
- continue;
- }
- if (child_node->name == PROTOCOL) {
- // Get shortName attribute
- for (Xml.Attr* prop = child_node->properties; prop != null;
- prop = prop->next) {
- if (prop->name == SHORT_NAME &&
- prop->children->content != null) {
- filter_entries.add (new FilterEntry (SHORT_NAME,
- prop->children->content));
- }
+ // Parse device info to create protocols
+ if (device_profile_node != null) {
+ if (device_profile_node->name == DEVICEPROFILE) {
+ for (Xml.Node* child_node = device_profile_node->children;
+ child_node != null; child_node = child_node->next) {
+ if (child_node->type == Xml.ElementType.TEXT_NODE) {
+ // ignore text nodes
+ continue;
+ }
+ if (child_node->name == PROTOCOL) {
+ // Get shortName attribute
+ for (Xml.Attr* prop = child_node->properties; prop != null;
+ prop = prop->next) {
+ if (prop->name == SHORT_NAME &&
+ prop->children->content != null) {
+ filter_entries.add (new FilterEntry (SHORT_NAME,
+ prop->children->content));
}
}
- if (child_node->name == PROTOCOL_INFO &&
- child_node->content != null) {
- filter_entries.add (new FilterEntry (PROTOCOL_INFO,
- child_node->content));
- }
- }// for
- }// if
- delete doc;
- } // outer if
-
- if (filter.length > 0) {
- var filter_wildcard = (filter == "*" || filter == "\"*\"");
-
- // Only enable wildcard if deviceprofile is not available
- if (device_profile_node == null && filter_wildcard) {
- // Wildcard filter entry
- filter_entries.add (new WildCardFilterEntry ());
- } else if (!filter_wildcard) {
- // Check if the input UIFilter is in the right format.
- if ((filter.get_char (0) != '"') ||
- ((filter.get_char (filter.length - 1) != '"')
- && (filter.get_char (filter.length - 1) != ','))
- || (!(filter.contains (",")) && filter.contains (";"))) {
- throw new RuihServiceError.INVALID_FILTER
- ("Invalid filter: " + filter);
}
+ if (child_node->name == PROTOCOL_INFO &&
+ child_node->content != null) {
+ filter_entries.add (new FilterEntry (PROTOCOL_INFO,
+ child_node->content));
+ }
+ }// for
+ }// if
+ delete doc;
+ } // outer if
+
+ if (filter.length > 0) {
+ var filter_wildcard = (filter == "*" || filter == "\"*\"");
+
+ // Only enable wildcard if deviceprofile is not available
+ if (device_profile_node == null && filter_wildcard) {
+ // Wildcard filter entry
+ filter_entries.add (new WildCardFilterEntry ());
+ } else if (!filter_wildcard) {
+ // Check if the input UIFilter is in the right format.
+ if ((filter.get_char (0) != '"') ||
+ ((filter.get_char (filter.length - 1) != '"')
+ && (filter.get_char (filter.length - 1) != ','))
+ || (!(filter.contains (",")) && filter.contains (";"))) {
+ throw new RuihServiceError.INVALID_FILTER
+ ("Invalid filter: " + filter);
+ }
- string[] entries = filter.split (",");
- foreach (unowned string str in entries) {
- // separator with no content, ignore
- if (str.length == 0) {
- continue;
- }
- string value = null;
- // string off quotes
- var name_value = str.split ("=");
- if (name_value != null &&
- name_value.length == 2 &&
- name_value[1] != null &&
- name_value[1].length > 2) {
- if (name_value[1].get_char (0) == '"' &&
- name_value[1].get_char
- (name_value[1].length - 1) == '"') {
- value = name_value[1].substring
- (1, name_value[1].length - 1);
- filter_entries.add (new FilterEntry
- (name_value[0], value));
- }
+ string[] entries = filter.split (",");
+ foreach (unowned string str in entries) {
+ // separator with no content, ignore
+ if (str.length == 0) {
+ continue;
+ }
+ string value = null;
+ // string off quotes
+ var name_value = str.split ("=");
+ if (name_value != null &&
+ name_value.length == 2 &&
+ name_value[1] != null &&
+ name_value[1].length > 2) {
+ if (name_value[1].get_char (0) == '"' &&
+ name_value[1].get_char
+ (name_value[1].length - 1) == '"') {
+ value = name_value[1].substring
+ (1, name_value[1].length - 1);
+ filter_entries.add (new FilterEntry
+ (name_value[0], value));
}
}
}
}
+ }
- // Generate result XML with or without protocols
- StringBuilder result = new StringBuilder (PRE_RESULT);
-
- if (this.ui_list != null && this.ui_list.size > 0) {
- var result_content = new StringBuilder ();
+ // Generate result XML with or without protocols
+ StringBuilder result = new StringBuilder (PRE_RESULT);
- foreach (UIElem i in this.ui_list) {
- UIElem ui = (UIElem)i;
- result_content.append (ui.to_ui_listing (filter_entries));
- }
+ if (this.ui_list != null && this.ui_list.size > 0) {
+ var result_content = new StringBuilder ();
- // Return empty string if there is no matching UI for a filter
- if (result_content.str == "") {
- return "";
- }
+ foreach (UIElem i in this.ui_list) {
+ UIElem ui = (UIElem)i;
+ result_content.append (ui.to_ui_listing (filter_entries));
+ }
- result.append (result_content.str);
+ // Return empty string if there is no matching UI for a filter
+ if (result_content.str == "") {
+ return "";
}
- result.append (POST_RESULT);
- return result.str;
+ result.append (result_content.str);
}
- }
+ result.append (POST_RESULT);
+
+ return result.str;
+}
} // RygelServiceManager class
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]