Fixed #6157: Reset cups instance on disconnect.

This commit is contained in:
akallabeth 2020-05-12 08:46:06 +02:00
parent 46c4b7bdc2
commit 13906f3ec6
1 changed files with 14 additions and 12 deletions

View File

@ -364,13 +364,15 @@ static void printer_cups_add_ref_driver(rdpPrinterDriver* driver)
} }
/* Singleton */ /* Singleton */
static rdpCupsPrinterDriver* cups_driver = NULL; static rdpCupsPrinterDriver* uniq_cups_driver = NULL;
static void printer_cups_release_ref_driver(rdpPrinterDriver* driver) static void printer_cups_release_ref_driver(rdpPrinterDriver* driver)
{ {
rdpCupsPrinterDriver* cups_driver = (rdpCupsPrinterDriver*)driver; rdpCupsPrinterDriver* cups_driver = (rdpCupsPrinterDriver*)driver;
if (cups_driver->references <= 1) if (cups_driver->references <= 1)
{ {
if (uniq_cups_driver == cups_driver)
uniq_cups_driver = NULL;
free(cups_driver); free(cups_driver);
cups_driver = NULL; cups_driver = NULL;
} }
@ -384,23 +386,23 @@ rdpPrinterDriver* cups_freerdp_printer_client_subsystem_entry(void)
FREERDP_API rdpPrinterDriver* freerdp_printer_client_subsystem_entry(void) FREERDP_API rdpPrinterDriver* freerdp_printer_client_subsystem_entry(void)
#endif #endif
{ {
if (!cups_driver) if (!uniq_cups_driver)
{ {
cups_driver = (rdpCupsPrinterDriver*)calloc(1, sizeof(rdpCupsPrinterDriver)); uniq_cups_driver = (rdpCupsPrinterDriver*)calloc(1, sizeof(rdpCupsPrinterDriver));
if (!cups_driver) if (!uniq_cups_driver)
return NULL; return NULL;
cups_driver->driver.EnumPrinters = printer_cups_enum_printers; uniq_cups_driver->driver.EnumPrinters = printer_cups_enum_printers;
cups_driver->driver.ReleaseEnumPrinters = printer_cups_release_enum_printers; uniq_cups_driver->driver.ReleaseEnumPrinters = printer_cups_release_enum_printers;
cups_driver->driver.GetPrinter = printer_cups_get_printer; uniq_cups_driver->driver.GetPrinter = printer_cups_get_printer;
cups_driver->driver.AddRef = printer_cups_add_ref_driver; uniq_cups_driver->driver.AddRef = printer_cups_add_ref_driver;
cups_driver->driver.ReleaseRef = printer_cups_release_ref_driver; uniq_cups_driver->driver.ReleaseRef = printer_cups_release_ref_driver;
cups_driver->id_sequence = 1; uniq_cups_driver->id_sequence = 1;
cups_driver->driver.AddRef(&cups_driver->driver); uniq_cups_driver->driver.AddRef(&uniq_cups_driver->driver);
} }
return &cups_driver->driver; return &uniq_cups_driver->driver;
} }