Don't leak from QPlatformPrinterSupportPlugin::get()

Cache the first QPlatformPrinterSupport returned from the first
QPlatformPrinterSupportPlugin, and treat it as an persistent singelton.

Change-Id: Ic1c83d7c1cdf4a09723a74e0b9fd485e0b0b3acb
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
Bradley T. Hughes 2012-03-02 11:10:23 +01:00 committed by Qt by Nokia
parent e1ec8727ea
commit b7ba685150

View File

@ -58,15 +58,27 @@ QPlatformPrinterSupportPlugin::~QPlatformPrinterSupportPlugin()
{
}
/*!
\internal
Returns a lazily-initialized singleton. Ownership is granted to the
QPlatformPrinterSupportPlugin, which is never unloaded or destroyed until
application exit, i.e. you can expect this pointer to always be valid and
multiple calls to this function will always return the same pointer.
*/
QPlatformPrinterSupport *QPlatformPrinterSupportPlugin::get()
{
QStringList k = loader()->keys();
if (k.isEmpty())
return 0;
QPlatformPrinterSupportPlugin *plugin = qobject_cast<QPlatformPrinterSupportPlugin *>(loader()->instance(k.first()));
if (!plugin)
return 0;
return plugin->create(k.first());
static QPlatformPrinterSupport *singleton = 0;
if (!singleton) {
QStringList k = loader()->keys();
if (k.isEmpty())
return 0;
QPlatformPrinterSupportPlugin *plugin = qobject_cast<QPlatformPrinterSupportPlugin *>(loader()->instance(k.first()));
if (!plugin)
return 0;
singleton = plugin->create(k.first());
}
return singleton;
}
QT_END_NAMESPACE