forked from enlightenment/efl
emotion: fix a race condition on shutdown when still saving a file.
SVN revision: 75770
This commit is contained in:
parent
97aec1869f
commit
9cb7eac7d2
|
@ -45,3 +45,4 @@
|
||||||
2012-08-28 Cedric Bail
|
2012-08-28 Cedric Bail
|
||||||
|
|
||||||
* Reset VLC pipeline on EOS.
|
* Reset VLC pipeline on EOS.
|
||||||
|
* Fix a race condition on shutdown when still saving a file position.
|
||||||
|
|
|
@ -16,6 +16,7 @@ Fixes:
|
||||||
- fix race condition in gstreamer render function on shutdown and file set.
|
- fix race condition in gstreamer render function on shutdown and file set.
|
||||||
- fix priority set/get for gstreamer.
|
- fix priority set/get for gstreamer.
|
||||||
- reset VLC pipeline on EOS.
|
- reset VLC pipeline on EOS.
|
||||||
|
- fix race condition on shutdown when still saving a file position.
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ struct _Smart_Data
|
||||||
|
|
||||||
#ifdef HAVE_EIO
|
#ifdef HAVE_EIO
|
||||||
Eio_File *load_xattr;
|
Eio_File *load_xattr;
|
||||||
|
Eio_File *save_xattr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
@ -481,6 +482,8 @@ emotion_object_file_set(Evas_Object *obj, const char *file)
|
||||||
/* Only cancel the load_xattr or we will loose ref to time_seek stringshare */
|
/* Only cancel the load_xattr or we will loose ref to time_seek stringshare */
|
||||||
if (sd->load_xattr) eio_file_cancel(sd->load_xattr);
|
if (sd->load_xattr) eio_file_cancel(sd->load_xattr);
|
||||||
sd->load_xattr = NULL;
|
sd->load_xattr = NULL;
|
||||||
|
if (sd->save_xattr) eio_file_cancel(sd->save_xattr);
|
||||||
|
sd->save_xattr = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
@ -1416,19 +1419,30 @@ emotion_object_last_position_load(Evas_Object *obj)
|
||||||
|
|
||||||
#ifdef HAVE_EIO
|
#ifdef HAVE_EIO
|
||||||
static void
|
static void
|
||||||
_eio_save_xattr_done(void *data, Eio_File *handler __UNUSED__)
|
_eio_save_xattr_cleanup(Smart_Data *sd, Eio_File *handler)
|
||||||
|
{
|
||||||
|
if (handler == sd->save_xattr) sd->save_xattr = NULL;
|
||||||
|
|
||||||
|
EINA_REFCOUNT_UNREF(sd)
|
||||||
|
_smart_data_free(sd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_eio_save_xattr_done(void *data, Eio_File *handler)
|
||||||
{
|
{
|
||||||
Smart_Data *sd = data;
|
Smart_Data *sd = data;
|
||||||
|
|
||||||
evas_object_smart_callback_call(sd->obj, SIG_POSITION_SAVE_SUCCEED, NULL);
|
evas_object_smart_callback_call(sd->obj, SIG_POSITION_SAVE_SUCCEED, NULL);
|
||||||
|
_eio_save_xattr_cleanup(sd, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_eio_save_xattr_error(void *data, Eio_File *handler __UNUSED__, int err __UNUSED__)
|
_eio_save_xattr_error(void *data, Eio_File *handler, int err __UNUSED__)
|
||||||
{
|
{
|
||||||
Smart_Data *sd = data;
|
Smart_Data *sd = data;
|
||||||
|
|
||||||
evas_object_smart_callback_call(sd->obj, SIG_POSITION_SAVE_FAILED, NULL);
|
evas_object_smart_callback_call(sd->obj, SIG_POSITION_SAVE_FAILED, NULL);
|
||||||
|
_eio_save_xattr_cleanup(sd, handler);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1449,8 +1463,17 @@ emotion_object_last_position_save(Evas_Object *obj)
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
#ifdef HAVE_EIO
|
#ifdef HAVE_EIO
|
||||||
eio_file_xattr_double_set(tmp, "user.e.time_seek", emotion_object_position_get(obj), 0,
|
if (sd->save_xattr) return ;
|
||||||
_eio_save_xattr_done, _eio_save_xattr_error, sd);
|
|
||||||
|
EINA_REFCOUNT_REF(sd);
|
||||||
|
|
||||||
|
sd->save_xattr = eio_file_xattr_double_set(tmp,
|
||||||
|
"user.e.time_seek",
|
||||||
|
emotion_object_position_get(obj),
|
||||||
|
0,
|
||||||
|
_eio_save_xattr_done,
|
||||||
|
_eio_save_xattr_error,
|
||||||
|
sd);
|
||||||
#else
|
#else
|
||||||
if (eina_xattr_double_set(tmp, "user.e.time_seek", emotion_object_position_get(obj), 0))
|
if (eina_xattr_double_set(tmp, "user.e.time_seek", emotion_object_position_get(obj), 0))
|
||||||
evas_object_smart_callback_call(obj, SIG_POSITION_SAVE_SUCCEED, NULL);
|
evas_object_smart_callback_call(obj, SIG_POSITION_SAVE_SUCCEED, NULL);
|
||||||
|
|
Loading…
Reference in New Issue