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 <dan...@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 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel