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 */
static rdpCupsPrinterDriver* cups_driver = NULL;
static rdpCupsPrinterDriver* uniq_cups_driver = NULL;
static void printer_cups_release_ref_driver(rdpPrinterDriver* driver)
{
rdpCupsPrinterDriver* cups_driver = (rdpCupsPrinterDriver*)driver;
if (cups_driver->references <= 1)
{
if (uniq_cups_driver == cups_driver)
uniq_cups_driver = NULL;
free(cups_driver);
cups_driver = NULL;
}
@ -384,23 +386,23 @@ rdpPrinterDriver* cups_freerdp_printer_client_subsystem_entry(void)
FREERDP_API rdpPrinterDriver* freerdp_printer_client_subsystem_entry(void)
#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;
cups_driver->driver.EnumPrinters = printer_cups_enum_printers;
cups_driver->driver.ReleaseEnumPrinters = printer_cups_release_enum_printers;
cups_driver->driver.GetPrinter = printer_cups_get_printer;
uniq_cups_driver->driver.EnumPrinters = printer_cups_enum_printers;
uniq_cups_driver->driver.ReleaseEnumPrinters = printer_cups_release_enum_printers;
uniq_cups_driver->driver.GetPrinter = printer_cups_get_printer;
cups_driver->driver.AddRef = printer_cups_add_ref_driver;
cups_driver->driver.ReleaseRef = printer_cups_release_ref_driver;
uniq_cups_driver->driver.AddRef = printer_cups_add_ref_driver;
uniq_cups_driver->driver.ReleaseRef = printer_cups_release_ref_driver;
cups_driver->id_sequence = 1;
cups_driver->driver.AddRef(&cups_driver->driver);
uniq_cups_driver->id_sequence = 1;
uniq_cups_driver->driver.AddRef(&uniq_cups_driver->driver);
}
return &cups_driver->driver;
return &uniq_cups_driver->driver;
}