VOLD - make volume daemon to handle state change from shared to no_media

When volume state changed from shared to no_media,
    volume is not properly unshared.

Change-Id: I0117d67da95440d982275746a166ef6f4ac1c0e2
Signed-off-by: Ethan <ethan.too@gmail.com>
gugelfrei
Ethan 14 years ago committed by Jean-Baptiste Queru
parent 826bec79ea
commit 75a3e1a95a

@ -266,6 +266,7 @@ void DirectVolume::handlePartitionRemoved(const char *devpath, NetlinkEvent *evt
int major = atoi(evt->findParam("MAJOR"));
int minor = atoi(evt->findParam("MINOR"));
char msg[255];
int state;
SLOGD("Volume %s %s partition %d:%d removed\n", getLabel(), getMountpoint(), major, minor);
@ -275,7 +276,8 @@ void DirectVolume::handlePartitionRemoved(const char *devpath, NetlinkEvent *evt
* the removal notification will be sent on the Disk
* itself
*/
if (getState() != Volume::State_Mounted) {
state = getState();
if (state != Volume::State_Mounted && state != Volume::State_Shared) {
return;
}
@ -300,6 +302,19 @@ void DirectVolume::handlePartitionRemoved(const char *devpath, NetlinkEvent *evt
} else {
SLOGD("Crisis averted");
}
} else if (state == Volume::State_Shared) {
/* removed during mass storage */
snprintf(msg, sizeof(msg), "Volume %s bad removal (%d:%d)",
getLabel(), major, minor);
mVm->getBroadcaster()->sendBroadcast(ResponseCode::VolumeBadRemoval,
msg, false);
if (mVm->unshareVolume(getLabel(), "ums")) {
SLOGE("Failed to unshare volume on bad removal (%s)",
strerror(errno));
} else {
SLOGD("Crisis averted");
}
}
}

Loading…
Cancel
Save