Merge lp:~vanvugt/compiz/fix-1002715-1002721 into lp:compiz/0.9.8

Proposed by Daniel van Vugt
Status: Merged
Merged at revision: 3209
Proposed branch: lp:~vanvugt/compiz/fix-1002715-1002721
Merge into: lp:compiz/0.9.8
Diff against target: 97 lines (+36/-9)
3 files modified
src/privatescreen.h (+2/-2)
src/privatescreen/tests/test-privatescreen.cpp (+31/-0)
src/screen.cpp (+3/-7)
To merge this branch: bzr merge lp:~vanvugt/compiz/fix-1002715-1002721
Reviewer Review Type Date Requested Status
Sam Spilsbury Approve
Review via email: mp+106936@code.launchpad.net

Description of the change

Don't drop plugins from the list to try and load before you've even tried to
load them. Doing so makes missing plugins silently ignored instead of an
error message (LP: #1002715). It also means valid plugins in more unusual, but
real locations in LD_LIBRARY_PATH will never get loaded (LP: #1002721).

To post a comment you must log in.
Revision history for this message
Sam Spilsbury (smspillaz) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/privatescreen.h'
2--- src/privatescreen.h 2012-05-15 15:41:59 +0000
3+++ src/privatescreen.h 2012-05-23 05:22:20 +0000
4@@ -267,13 +267,13 @@
5 bool isDirtyPluginList () const { return dirtyPluginList; }
6 void setDirtyPluginList () { dirtyPluginList = true; }
7
8+ CompOption::Value::Vector mergedPluginList(CompOption::Value::Vector const& extraPluginsRequested) const;
9+
10 private:
11 CompOption::Value plugin;
12 bool dirtyPluginList;
13 typedef std::set<CompString> CompStringSet;
14 CompStringSet blacklist;
15-
16- CompOption::Value::Vector mergedPluginList(CompOption::Value::Vector const& extraPluginsRequested);
17 };
18
19 class GrabList
20
21=== modified file 'src/privatescreen/tests/test-privatescreen.cpp'
22--- src/privatescreen/tests/test-privatescreen.cpp 2012-05-10 11:30:52 +0000
23+++ src/privatescreen/tests/test-privatescreen.cpp 2012-05-23 05:22:20 +0000
24@@ -619,6 +619,37 @@
25 for (CompPlugin* p; (p = CompPlugin::pop ()) != 0; CompPlugin::unload (p));
26 }
27
28+// Verify plugin ordering, and verify that plugins not in availablePlugins
29+// don't get dropped. Because availablePlugins is NOT a definitive list
30+// of what the dynamic loader might be able to find in its path.
31+TEST(privatescreen_PluginManagerTest, verify_plugin_ordering)
32+{
33+ using namespace testing;
34+
35+ cps::PluginManager ps;
36+
37+ initialPlugins.clear();
38+ initialPlugins.push_back("alice");
39+ initialPlugins.push_back("bob");
40+ initialPlugins.push_back("charlie");
41+
42+ CompOption::Value::Vector extra;
43+ extra.push_back("charlie");
44+ extra.push_back("david");
45+ extra.push_back("alice");
46+ extra.push_back("eric");
47+
48+ CompOption::Value::Vector merged = ps.mergedPluginList(extra);
49+
50+ ASSERT_EQ(merged.size(), 6);
51+ ASSERT_EQ(merged[0].s(), "core");
52+ ASSERT_EQ(merged[1].s(), "alice");
53+ ASSERT_EQ(merged[2].s(), "bob");
54+ ASSERT_EQ(merged[3].s(), "charlie");
55+ ASSERT_EQ(merged[4].s(), "david");
56+ ASSERT_EQ(merged[5].s(), "eric");
57+}
58+
59 TEST(privatescreen_PluginManagerTest, calling_updatePlugins_with_additional_plugins)
60 {
61 using namespace testing;
62
63=== modified file 'src/screen.cpp'
64--- src/screen.cpp 2012-05-15 15:41:59 +0000
65+++ src/screen.cpp 2012-05-23 05:22:20 +0000
66@@ -985,10 +985,8 @@
67
68
69 CompOption::Value::Vector
70-cps::PluginManager::mergedPluginList (CompOption::Value::Vector const& extraPluginsRequested)
71+cps::PluginManager::mergedPluginList (CompOption::Value::Vector const& extraPluginsRequested) const
72 {
73- std::list<CompString> availablePlugins(CompPlugin::availablePlugins ());
74-
75 CompOption::Value::Vector result;
76
77 /* Must have core as first plugin */
78@@ -1003,8 +1001,7 @@
79 if (blacklist.find (p) != blacklist.end ())
80 continue;
81
82- if (availablePlugins.end() != std::find(availablePlugins.begin(), availablePlugins.end(), p))
83- result.push_back(p);
84+ result.push_back(p);
85 }
86
87 /* Add plugins not in the initial list */
88@@ -1031,8 +1028,7 @@
89
90 if (!skip)
91 {
92- if (availablePlugins.end() != std::find(availablePlugins.begin(), availablePlugins.end(), opt.s()))
93- result.push_back(opt.s());
94+ result.push_back(opt.s());
95 }
96 }
97 return result;

Subscribers

People subscribed via source and target branches