Fix IO_OUTPUT teardown issue.

bug 8891075

Change-Id: I6ec8d9a7db6def3db4111923d366f00f329cdacf
diff --git a/driver/rsdAllocation.cpp b/driver/rsdAllocation.cpp
index ef7d024..2f9aa6d 100644
--- a/driver/rsdAllocation.cpp
+++ b/driver/rsdAllocation.cpp
@@ -476,8 +476,9 @@
 #endif
 
     if (alloc->mHal.drvState.lod[0].mallocPtr) {
-        // don't free user-allocated ptrs
-        if (!(drv->useUserProvidedPtr)) {
+        // don't free user-allocated ptrs or IO_OUTPUT buffers
+        if (!(drv->useUserProvidedPtr) &&
+            !(alloc->mHal.state.usageFlags & RS_ALLOCATION_USAGE_IO_OUTPUT)) {
             free(alloc->mHal.drvState.lod[0].mallocPtr);
         }
         alloc->mHal.drvState.lod[0].mallocPtr = NULL;