diff --git a/legacy/eeze/ChangeLog b/legacy/eeze/ChangeLog index d6189bfea4..6fde511eca 100644 --- a/legacy/eeze/ChangeLog +++ b/legacy/eeze/ChangeLog @@ -114,3 +114,7 @@ 2012-07-30 Mike Blumenkrantz * Add EEZE_DISK_MOUNTOPT_NODEV option for disabling device nodes on mount + +2012-07-31 Mike Blumenkrantz + + * Prevent mount operations from retrying infinitely on failure diff --git a/legacy/eeze/src/lib/eeze_disk_mount.c b/legacy/eeze/src/lib/eeze_disk_mount.c index 41bd8c6b35..7517e108fd 100644 --- a/legacy/eeze/src/lib/eeze_disk_mount.c +++ b/legacy/eeze/src/lib/eeze_disk_mount.c @@ -159,9 +159,17 @@ _eeze_disk_mount_result_handler(void *data __UNUSED__, int type __UNUSED__, Ecor break; default: - INF("Could not unmount disk, retrying"); - disk->mounter = ecore_exe_run(eina_strbuf_string_get(disk->unmount_cmd), disk); - eeze_events = eina_list_append(eeze_events, disk); + if (disk->mount_fail_count++ < 3) + { + INF("Could not unmount disk, retrying"); + disk->mounter = ecore_exe_run(eina_strbuf_string_get(disk->unmount_cmd), disk); + eeze_events = eina_list_append(eeze_events, disk); + } + else + { + disk->mount_fail_count = 0; + _eeze_disk_mount_error_handler(disk, "Maximimum number of mount-related failures reached"); + } return ECORE_CALLBACK_RENEW; } else @@ -184,12 +192,20 @@ _eeze_disk_mount_result_handler(void *data __UNUSED__, int type __UNUSED__, Ecor break; default: - INF("Could not eject disk, retrying"); - if (disk->mount_status & EEZE_DISK_UNMOUNTING) - disk->mounter = ecore_exe_run(eina_strbuf_string_get(disk->unmount_cmd), disk); - else - disk->mounter = ecore_exe_run(eina_strbuf_string_get(disk->eject_cmd), disk); - eeze_events = eina_list_append(eeze_events, disk); + if (disk->mount_fail_count++ < 3) + { + INF("Could not eject disk, retrying"); + if (disk->mount_status & EEZE_DISK_UNMOUNTING) + disk->mounter = ecore_exe_run(eina_strbuf_string_get(disk->unmount_cmd), disk); + else + disk->mounter = ecore_exe_run(eina_strbuf_string_get(disk->eject_cmd), disk); + eeze_events = eina_list_append(eeze_events, disk); + } + else + { + disk->mount_fail_count = 0; + _eeze_disk_mount_error_handler(disk, "Maximimum number of mount-related failures reached"); + } return ECORE_CALLBACK_RENEW; } return ECORE_CALLBACK_RENEW; diff --git a/legacy/eeze/src/lib/eeze_disk_private.h b/legacy/eeze/src/lib/eeze_disk_private.h index 080035fefa..85fcd690cd 100644 --- a/legacy/eeze/src/lib/eeze_disk_private.h +++ b/legacy/eeze/src/lib/eeze_disk_private.h @@ -52,6 +52,7 @@ struct _Eeze_Disk Eina_Bool mounted : 1; Ecore_Exe *mounter; Ecore_Timer *mount_fail_delay; + unsigned int mount_fail_count; int fail_pol_check; const char *syspath;