If ecore_file_monitor_del is called inside the file monitor callback function,
eina_list found from monitor_hash would be freed. (You can check this inside
eina_hash_list_remove.)
Then, EINA_LIST_FOREACH makes one more for loop with invalid eina_list pointer.
EINA_LIST_FOREACH_SAFE can prevent from this problem.
Change-Id: I3562cc310632a24ba9435b6e36f5a5ba8bf2d429
static Eina_Bool
_ecore_file_monitor_inotify_handler(void *data EINA_UNUSED, Ecore_Fd_Handler *fdh)
{
- Eina_List *l, *ll;
+ Eina_List *l, *ll, *ll2;
Ecore_File_Monitor *em;
char buffer[16384];
struct inotify_event *event;
i += event_size;
l = _ecore_file_monitor_inotify_monitor_find(event->wd);
- EINA_LIST_FOREACH(l, ll, em)
+ EINA_LIST_FOREACH_SAFE(l, ll, ll2, em)
_ecore_file_monitor_inotify_events(em, (event->len ? event->name : NULL), event->mask);
}