Works around a race condition between the vold and MountService uevent handlers Change-Id: I71c92f2e9b92e1fefc192da166a91d81bc60e242 Signed-off-by: Mike Lockwood <lockwood@android.com>
@ -220,6 +220,10 @@ void DirectVolume::handlePartitionAdded(const char *devpath, NetlinkEvent *evt)
#endif
if (getState() != Volume::State_Formatting) {
setState(Volume::State_Idle);
if (mRetryMount == true) {
mRetryMount = false;
mountVol();
}
} else {
#ifdef PARTITION_DEBUG
@ -116,6 +116,7 @@ Volume::Volume(VolumeManager *vm, const char *label, const char *mount_point) {
mState = Volume::State_Init;
mCurrentlyMountedKdev = -1;
mPartIdx = -1;
Volume::~Volume() {
@ -174,6 +175,10 @@ void Volume::setState(int state) {
return;
if ((oldState == Volume::State_Pending) && (state != Volume::State_Idle)) {
mState = state;
SLOGD("Volume %s state changing %d (%s) -> %d (%s)", mLabel,
@ -309,6 +314,9 @@ int Volume::mountVol() {
return -1;
} else if (getState() != Volume::State_Idle) {
errno = EBUSY;
if (getState() == Volume::State_Pending) {
mRetryMount = true;
@ -52,6 +52,7 @@ protected:
VolumeManager *mVm;
bool mDebug;
int mPartIdx;
bool mRetryMount;
/*
* The major/minor tuple of the currently mounted filesystem.