- Fix memory leak

- Fix memory corruptions
- Does not fix es1370mp / es1371mp driver (qemu / vmware)

svn path=/trunk/; revision=40058
This commit is contained in:
Johannes Anderwald
2009-03-16 13:12:14 +00:00
parent 5c6d424c26
commit 118cf3b5e1
2 changed files with 36 additions and 8 deletions

View File

@@ -468,10 +468,11 @@ CreatePinWorkerRoutine(
DPRINT("Pin %p\n", Pin);
}
DPRINT1("CreatePinWorkerRoutine completing irp\n");
DPRINT1("CreatePinWorkerRoutine completing irp %p\n", WorkerContext->Irp);
WorkerContext->Irp->IoStatus.Status = Status;
WorkerContext->Irp->IoStatus.Information = 0;
IoCompleteRequest(WorkerContext->Irp, IO_SOUND_INCREMENT);
ExFreePool(WorkerContext);
}

View File

@@ -215,10 +215,24 @@ IResourceList_fnAddEntry(
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlCopyMemory(NewTranslatedResources, This->TranslatedResourceList, sizeof(CM_RESOURCE_LIST) + (This->TranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
RtlCopyMemory(NewTranslatedResources, This->TranslatedResourceList, sizeof(CM_RESOURCE_LIST));
if (This->TranslatedResourceList[0].List->PartialResourceList.Count > 1)
{
RtlCopyMemory(&NewTranslatedResources->List[0].PartialResourceList.PartialDescriptors[0],
&This->TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[0],
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * This->TranslatedResourceList->List[0].PartialResourceList.Count);
}
RtlCopyMemory(&NewTranslatedResources->List[0].PartialResourceList.PartialDescriptors[This->TranslatedResourceList[0].List->PartialResourceList.Count], Translated, sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
RtlCopyMemory(NewUntranslatedResources, This->UntranslatedResourceList, sizeof(CM_RESOURCE_LIST) + (This->UntranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
RtlCopyMemory(NewUntranslatedResources, This->UntranslatedResourceList, sizeof(CM_RESOURCE_LIST));
if (This->UntranslatedResourceList[0].List->PartialResourceList.Count > 1)
{
RtlCopyMemory(&NewUntranslatedResources->List[0].PartialResourceList.PartialDescriptors[0],
&This->UntranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[0],
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * This->UntranslatedResourceList->List[0].PartialResourceList.Count);
}
RtlCopyMemory(&NewUntranslatedResources->List[0].PartialResourceList.PartialDescriptors[This->UntranslatedResourceList[0].List->PartialResourceList.Count], Untranslated, sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
FreeItem(This->TranslatedResourceList, TAG_PORTCLASS);
@@ -255,7 +269,14 @@ IResourceList_fnAddEntryFromParent(
if (!NewTranslatedResources)
return STATUS_INSUFFICIENT_RESOURCES;
RtlCopyMemory(NewTranslatedResources, This->TranslatedResourceList, sizeof(CM_RESOURCE_LIST) + (This->TranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
RtlCopyMemory(NewTranslatedResources, This->TranslatedResourceList, sizeof(CM_RESOURCE_LIST));
if (This->TranslatedResourceList[0].List->PartialResourceList.Count > 1)
{
RtlCopyMemory(&NewTranslatedResources->List[0].PartialResourceList.PartialDescriptors[0],
&This->TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[0],
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * This->TranslatedResourceList->List[0].PartialResourceList.Count);
}
RtlCopyMemory(&NewTranslatedResources->List[0].PartialResourceList.PartialDescriptors[This->TranslatedResourceList[0].List->PartialResourceList.Count], Translated, sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
FreeItem(This->TranslatedResourceList, TAG_PORTCLASS);
@@ -336,7 +357,10 @@ PcNewResourceList(
/* Initialize */
NewTranslatedSize = sizeof(CM_RESOURCE_LIST) + (TranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
NewTranslatedSize = sizeof(CM_RESOURCE_LIST);
if (TranslatedResourceList[0].List->PartialResourceList.Count > 1)
NewTranslatedSize += (TranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
NewTranslatedResources = AllocateItem(PoolType, NewTranslatedSize, TAG_PORTCLASS);
if (!NewTranslatedResources)
{
@@ -344,7 +368,10 @@ PcNewResourceList(
return STATUS_INSUFFICIENT_RESOURCES;
}
NewUntranslatedSize = sizeof(CM_RESOURCE_LIST) + (UntranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
NewUntranslatedSize = sizeof(CM_RESOURCE_LIST);
if (UntranslatedResourceList[0].List->PartialResourceList.Count > 1)
NewUntranslatedSize += (UntranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
NewUntranslatedResources = AllocateItem(PoolType, NewUntranslatedSize, TAG_PORTCLASS);
if (!NewUntranslatedResources)
{
@@ -353,8 +380,8 @@ PcNewResourceList(
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlCopyMemory(NewTranslatedResources, TranslatedResourceList, sizeof(CM_RESOURCE_LIST) + (TranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
RtlCopyMemory(NewUntranslatedResources, UntranslatedResourceList, sizeof(CM_RESOURCE_LIST) + (UntranslatedResourceList[0].List->PartialResourceList.Count-1) * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
RtlCopyMemory(NewTranslatedResources, TranslatedResourceList, NewTranslatedSize);
RtlCopyMemory(NewUntranslatedResources, UntranslatedResourceList, NewUntranslatedSize);
NewList->lpVtbl = (IResourceListVtbl*)&vt_ResourceListVtbl;
NewList->ref = 1;