[PATCH v2 29/42] Add static extensions before those in modules

Daniel Stone daniel at fooishbar.org
Fri Dec 2 03:27:37 PST 2011


Make sure we add static extensions before anything in a module.  This is
more or less a no-op at the moment, but will come in handy later when
extension dependency sorting is removed.

Signed-off-by: Daniel Stone <daniel at fooishbar.org>
---

v2: New, fixes GLX vs. Composite visual creation.

 hw/xfree86/common/xf86Module.h |    5 +++++
 hw/xfree86/loader/loadext.c    |    4 ++++
 mi/miinitext.c                 |   33 +++++++++++++++++++++------------
 3 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 422934e..f9bccb1 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -180,6 +180,11 @@ typedef struct {
 
 extern _X_EXPORT ExtensionModule *ExtensionModuleList;
 
+/* This really shouldn't be here, but gets moved in about three commits'
+ * time.  So odds are the only people who ever see this comment are doing
+ * patch review, in which case, thanks! */
+extern _X_EXPORT void AddStaticExtensions(void);
+
 /* Prototypes for Loader functions that are exported to modules */
 extern _X_EXPORT pointer LoadSubModule(pointer, const char *, const char **,
 		      const char **, pointer, const XF86ModReqInfo *,
diff --git a/hw/xfree86/loader/loadext.c b/hw/xfree86/loader/loadext.c
index 4078b77..a9811ba 100644
--- a/hw/xfree86/loader/loadext.c
+++ b/hw/xfree86/loader/loadext.c
@@ -49,6 +49,10 @@ NewExtensionModule(void)
     ExtensionModule *save = ExtensionModuleList;
     int n;
 
+    /* Make sure built-in extensions get added to the list before those
+     * in modules. */
+    AddStaticExtensions();
+
     /* Sanity check */
     if (!ExtensionModuleList)
 	numExtensionModules = 0;
diff --git a/mi/miinitext.c b/mi/miinitext.c
index a6705d4..195a656 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -375,28 +375,37 @@ static ExtensionModule staticExtensions[] = {
 #endif
     { NULL, NULL, NULL, NULL, NULL }
 };
-    
+
+void
+AddStaticExtensions(void)
+{
+    static Bool listInitialised = FALSE;
+    int i;
+
+    if (listInitialised)
+        return;
+    listInitialised = TRUE;
+
+    /* Add built-in extensions to the list. */
+    for (i = 0; staticExtensions[i].name; i++)
+        LoadExtension(&staticExtensions[i], TRUE);
+}
+
 /*ARGSUSED*/
 void
 InitExtensions(int argc, char *argv[])
 {
     int i;
     ExtensionModule *ext;
-    static Bool listInitialised = FALSE;
-
-    if (!listInitialised) {
-	/* Add built-in extensions to the list. */
-	for (i = 0; staticExtensions[i].name; i++)
-	    LoadExtension(&staticExtensions[i], TRUE);
 
-	/* Sort the extensions according the init dependencies. */
-	LoaderSortExtensions();
-	listInitialised = TRUE;
-    }
+    /* Make sure all static extensions have been added, then sort the
+     * extensions according to their init dependencies. */
+    AddStaticExtensions();
+    LoaderSortExtensions();
 
     for (i = 0; ExtensionModuleList[i].name != NULL; i++) {
 	ext = &ExtensionModuleList[i];
-	if (ext->initFunc != NULL && 
+	if (ext->initFunc != NULL &&
 	    (ext->disablePtr == NULL || !*ext->disablePtr)) {
 	    (ext->initFunc)();
 	}
-- 
1.7.7.3



More information about the xorg-devel mailing list