Dmitry Timoshkov : winspool.drv: Move loading of libcups out of the init code protected by mutex.
Alexandre Julliard
julliard at winehq.org
Mon Apr 1 13:48:40 CDT 2013
Module: wine
Branch: master
Commit: 142c2982dc3ce33a09004a284a5b99328945a654
URL: http://source.winehq.org/git/wine.git/?a=commit;h=142c2982dc3ce33a09004a284a5b99328945a654
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Mon Apr 1 12:49:22 2013 +0900
winspool.drv: Move loading of libcups out of the init code protected by mutex.
---
dlls/winspool.drv/info.c | 41 +++++++++++++++++++++++++++--------------
1 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 27a6edd..141b2f4 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -874,6 +874,28 @@ static cups_ptype_t get_cups_printer_type( const cups_dest_t *dest )
return ret;
}
+static void load_cups(void)
+{
+ cupshandle = wine_dlopen( SONAME_LIBCUPS, RTLD_NOW, NULL, 0 );
+ if (!cupshandle) return;
+
+ TRACE("%p: %s loaded\n", cupshandle, SONAME_LIBCUPS);
+
+#define DO_FUNC(x) \
+ p##x = wine_dlsym( cupshandle, #x, NULL, 0 ); \
+ if (!p##x) \
+ { \
+ ERR("failed to load symbol %s\n", #x); \
+ cupshandle = NULL; \
+ return; \
+ }
+ CUPS_FUNCS;
+#undef DO_FUNC
+#define DO_FUNC(x) p##x = wine_dlsym( cupshandle, #x, NULL, 0 )
+ CUPS_OPT_FUNCS;
+#undef DO_FUNC
+}
+
static BOOL CUPS_LoadPrinters(void)
{
int i, nrofdests;
@@ -882,24 +904,11 @@ static BOOL CUPS_LoadPrinters(void)
PRINTER_INFO_2W pi2;
WCHAR *port, *ppd_dir = NULL, *ppd;
HKEY hkeyPrinter, hkeyPrinters;
- char loaderror[256];
WCHAR nameW[MAX_PATH];
HANDLE added_printer;
cups_ptype_t printer_type;
- cupshandle = wine_dlopen(SONAME_LIBCUPS, RTLD_NOW, loaderror, sizeof(loaderror));
- if (!cupshandle) {
- TRACE("%s\n", loaderror);
- return FALSE;
- }
- TRACE("%p: %s loaded\n", cupshandle, SONAME_LIBCUPS);
-
-#define DO_FUNC(x) p##x = wine_dlsym( cupshandle, #x, NULL, 0 ); if (!p##x) return FALSE
- CUPS_FUNCS;
-#undef DO_FUNC
-#define DO_FUNC(x) p##x = wine_dlsym( cupshandle, #x, NULL, 0 )
- CUPS_OPT_FUNCS;
-#undef DO_FUNC
+ if (!cupshandle) return FALSE;
if(RegCreateKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters) !=
ERROR_SUCCESS) {
@@ -1590,6 +1599,10 @@ void WINSPOOL_LoadSystemPrinters(void)
WCHAR PrinterName[256];
BOOL done = FALSE;
+#ifdef SONAME_LIBCUPS
+ load_cups();
+#endif
+
/* FIXME: The init code should be moved to spoolsv.exe */
init_mutex = CreateMutexW( NULL, TRUE, winspool_mutex_name );
if (!init_mutex)
More information about the wine-cvs
mailing list