void MtpServer::removeStorage(MtpStorage* storage) { android::Mutex::Autolock autoLock(mMutex); for (size_t i = 0; i < mStorages.size(); i++) { if (mStorages[i] == storage) { MTPD("MtpServer::removeStorage calling sendStoreRemoved\n"); // First lock the mutex so that the inotify thread and main // thread do not do anything while we remove the storage // item, and to make sure we don't remove the item while an // operation is in progress mDatabase->lockMutex(); // Grab the storage ID before we delete the item from the // database MtpStorageID storageID = storage->getStorageID(); // Remove the item from the mStorages from the vector. At // this point the main thread will no longer be able to find // this storage item anymore. mStorages.removeAt(i); // Destroy the storage item, free up all the memory, kill // the inotify thread. mDatabase->destroyDB(storageID); // Tell the host OS that the storage item is gone. sendStoreRemoved(storageID); // Unlock any remaining mutexes on other storage devices. // If no storage devices exist anymore this will do nothing. mDatabase->unlockMutex(); break; } } MTPD("MtpServer::removeStorage DONE\n"); }
void MtpServer::removeStorage(MtpStorage* storage) { Mutex::Autolock autoLock(mMutex); for (int i = 0; i < mStorages.size(); i++) { if (mStorages[i] == storage) { mStorages.removeAt(i); sendStoreRemoved(storage->getStorageID()); break; } } }