landing mEventQ portion of patch from bug 237958 "cleanup the way nsHttpChannel gets the current event queue" r=biesi sr=bzbarsky

This commit is contained in:
darin%meer.net 2004-04-20 00:56:29 +00:00
Родитель 0bf389e3b6
Коммит 80ff5a1004
4 изменённых файлов: 18 добавлений и 28 удалений

Просмотреть файл

@ -235,14 +235,7 @@ nsHttpChannel::Init(nsIURI *uri,
nsresult nsresult
nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr) nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr)
{ {
nsCOMPtr<nsIEventQueueService> eqs; nsresult rv;
nsCOMPtr<nsIEventQueue> eventQ;
gHttpHandler->GetEventQueueService(getter_AddRefs(eqs));
if (eqs)
eqs->ResolveEventQueue(NS_CURRENT_EVENTQ, getter_AddRefs(eventQ));
if (!eventQ)
return NS_ERROR_FAILURE;
nsAsyncCallEvent *event = new nsAsyncCallEvent; nsAsyncCallEvent *event = new nsAsyncCallEvent;
if (!event) if (!event)
@ -256,7 +249,7 @@ nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr)
nsHttpChannel::AsyncCall_EventHandlerFunc, nsHttpChannel::AsyncCall_EventHandlerFunc,
nsHttpChannel::AsyncCall_EventCleanupFunc); nsHttpChannel::AsyncCall_EventCleanupFunc);
nsresult rv = eventQ->PostEvent(event); rv = mEventQ->PostEvent(event);
if (NS_FAILED(rv)) { if (NS_FAILED(rv)) {
PL_DestroyEvent(event); PL_DestroyEvent(event);
NS_RELEASE_THIS(); NS_RELEASE_THIS();
@ -374,8 +367,7 @@ nsHttpChannel::AsyncAbort(nsresult status)
// create a proxy for the listener.. // create a proxy for the listener..
nsCOMPtr<nsIRequestObserver> observer; nsCOMPtr<nsIRequestObserver> observer;
NS_NewRequestObserverProxy(getter_AddRefs(observer), NS_NewRequestObserverProxy(getter_AddRefs(observer), mListener, mEventQ);
mListener, NS_CURRENT_EVENTQ);
if (observer) { if (observer) {
observer->OnStartRequest(this, mListenerContext); observer->OnStartRequest(this, mListenerContext);
observer->OnStopRequest(this, mListenerContext, mStatus); observer->OnStopRequest(this, mListenerContext, mStatus);
@ -565,14 +557,6 @@ nsHttpChannel::SetupTransaction()
} }
} }
if (!mEventQ) {
// grab a reference to the calling thread's event queue.
nsCOMPtr<nsIEventQueueService> eqs;
gHttpHandler->GetEventQueueService(getter_AddRefs(eqs));
if (eqs)
eqs->ResolveEventQueue(NS_CURRENT_EVENTQ, getter_AddRefs(mEventQ));
}
// create the transaction object // create the transaction object
mTransaction = new nsHttpTransaction(); mTransaction = new nsHttpTransaction();
if (!mTransaction) if (!mTransaction)
@ -2988,8 +2972,18 @@ nsHttpChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *context)
NS_ENSURE_ARG_POINTER(listener); NS_ENSURE_ARG_POINTER(listener);
NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS); NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
nsresult rv;
// we want to grab a reference to the calling thread's event queue at
// this point. we will proxy all events back to the current thread via
// this event queue.
if (!mEventQ) {
rv = gHttpHandler->GetCurrentEventQ(getter_AddRefs(mEventQ));
if (NS_FAILED(rv)) return rv;
}
PRInt32 port; PRInt32 port;
nsresult rv = mURI->GetPort(&port); rv = mURI->GetPort(&port);
if (NS_FAILED(rv)) if (NS_FAILED(rv))
return rv; return rv;

Просмотреть файл

@ -430,16 +430,14 @@ nsHttpHandler::GetCacheSession(nsCacheStoragePolicy storagePolicy,
} }
nsresult nsresult
nsHttpHandler::GetEventQueueService(nsIEventQueueService **result) nsHttpHandler::GetCurrentEventQ(nsIEventQueue **result)
{ {
if (!mEventQueueService) { if (!mEventQueueService) {
nsresult rv; nsresult rv;
mEventQueueService = do_GetService(kEventQueueServiceCID, &rv); mEventQueueService = do_GetService(kEventQueueServiceCID, &rv);
if (NS_FAILED(rv)) return rv; if (NS_FAILED(rv)) return rv;
} }
*result = mEventQueueService; return mEventQueueService->ResolveEventQueue(NS_CURRENT_EVENTQ, result);
NS_ADDREF(*result);
return NS_OK;
} }
nsresult nsresult

Просмотреть файл

@ -165,7 +165,7 @@ public:
// The HTTP handler caches pointers to specific XPCOM services, and // The HTTP handler caches pointers to specific XPCOM services, and
// provides the following helper routines for accessing those services: // provides the following helper routines for accessing those services:
// //
nsresult GetEventQueueService(nsIEventQueueService **); nsresult GetCurrentEventQ(nsIEventQueue **);
nsresult GetStreamConverterService(nsIStreamConverterService **); nsresult GetStreamConverterService(nsIStreamConverterService **);
nsresult GetMimeService(nsIMIMEService **); nsresult GetMimeService(nsIMIMEService **);
nsresult GetIOService(nsIIOService** service); nsresult GetIOService(nsIIOService** service);

Просмотреть файл

@ -913,9 +913,7 @@ nsHttpTransaction::DeleteSelfOnConsumerThread()
NS_ASSERTION(!mDestroying, "deleting self again"); NS_ASSERTION(!mDestroying, "deleting self again");
mDestroying = PR_TRUE; mDestroying = PR_TRUE;
gHttpHandler->GetEventQueueService(getter_AddRefs(eqs)); gHttpHandler->GetCurrentEventQ(getter_AddRefs(currentEventQ));
if (eqs)
eqs->ResolveEventQueue(NS_CURRENT_EVENTQ, getter_AddRefs(currentEventQ));
if (currentEventQ == mConsumerEventQ) if (currentEventQ == mConsumerEventQ)
delete this; delete this;