зеркало из https://github.com/mozilla/gecko-dev.git
Put back in changes to cache rdf service.
This commit is contained in:
Родитель
842ca6f808
Коммит
938698c4b0
|
@ -47,6 +47,10 @@ public:
|
||||||
nsRDFResource(void);
|
nsRDFResource(void);
|
||||||
virtual ~nsRDFResource(void);
|
virtual ~nsRDFResource(void);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static nsIRDFService* gRDFService;
|
||||||
|
static nsrefcnt gRDFServiceRefCnt;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
char* mURI;
|
char* mURI;
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,7 +27,8 @@
|
||||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||||
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
|
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
nsIRDFService* nsRDFResource::gRDFService = nsnull;
|
||||||
|
nsrefcnt nsRDFResource::gRDFServiceRefCnt = 0;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -39,21 +40,18 @@ nsRDFResource::nsRDFResource(void)
|
||||||
|
|
||||||
nsRDFResource::~nsRDFResource(void)
|
nsRDFResource::~nsRDFResource(void)
|
||||||
{
|
{
|
||||||
nsIRDFService* rdfService = nsnull;
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
rv = nsServiceManager::GetService(kRDFServiceCID,
|
|
||||||
nsIRDFService::GetIID(),
|
gRDFService->UnregisterResource(this);
|
||||||
(nsISupports**) &rdfService);
|
|
||||||
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF service");
|
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv) && rdfService != nsnull) {
|
|
||||||
rdfService->UnregisterResource(this);
|
|
||||||
nsServiceManager::ReleaseService(kRDFServiceCID, rdfService);
|
|
||||||
}
|
|
||||||
|
|
||||||
// N.B. that we need to free the URI *after* we un-cache the resource,
|
// N.B. that we need to free the URI *after* we un-cache the resource,
|
||||||
// due to the way that the resource manager is implemented.
|
// due to the way that the resource manager is implemented.
|
||||||
nsCRT::free(mURI);
|
nsCRT::free(mURI);
|
||||||
|
|
||||||
|
if (--gRDFServiceRefCnt == 0) {
|
||||||
|
nsServiceManager::ReleaseService(kRDFServiceCID, gRDFService);
|
||||||
|
gRDFService = nsnull;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_ADDREF(nsRDFResource)
|
NS_IMPL_ADDREF(nsRDFResource)
|
||||||
|
@ -120,24 +118,16 @@ nsRDFResource::Init(const char* aURI)
|
||||||
|
|
||||||
PL_strcpy(mURI, aURI);
|
PL_strcpy(mURI, aURI);
|
||||||
|
|
||||||
nsIRDFService* rdfService = nsnull;
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
rv = nsServiceManager::GetService(kRDFServiceCID,
|
if (gRDFServiceRefCnt++ == 0) {
|
||||||
nsIRDFService::GetIID(),
|
rv = nsServiceManager::GetService(kRDFServiceCID,
|
||||||
(nsISupports**) &rdfService);
|
nsIRDFService::GetIID(),
|
||||||
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF service");
|
(nsISupports**)&gRDFService);
|
||||||
|
if (NS_FAILED(rv)) return rv;
|
||||||
if (!NS_SUCCEEDED(rv)) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
if (rdfService == nsnull) {
|
|
||||||
return NS_ERROR_NULL_POINTER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't replace an existing resource with the same URI automatically
|
// don't replace an existing resource with the same URI automatically
|
||||||
rv = rdfService->RegisterResource(this, PR_TRUE);
|
return gRDFService->RegisterResource(this, PR_TRUE);
|
||||||
nsServiceManager::ReleaseService(kRDFServiceCID, rdfService);
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
Загрузка…
Ссылка в новой задаче