efl.task - add an api to clear environment
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sat, 3 Mar 2018 09:01:05 +0000 (18:01 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Tue, 10 Apr 2018 11:10:46 +0000 (20:10 +0900)
src/lib/ecore/efl_loop.c
src/lib/ecore/efl_loop.eo
src/lib/ecore/efl_task.c
src/lib/ecore/efl_task.eo

index b3a58f9..f4dd2bf 100644 (file)
@@ -901,6 +901,21 @@ _efl_loop_efl_task_env_get(Eo *obj, Efl_Loop_Data *pd, const char *var)
    return efl_task_env_get(efl_super(obj, EFL_LOOP_CLASS), var);
 }
 
+EOLIAN static void
+_efl_loop_efl_task_env_reset(Eo *obj EINA_UNUSED, Efl_Loop_Data *pd)
+{
+   Efl_Task_Data *td = efl_data_scope_get(obj, EFL_TASK_CLASS);
+   if (!td) return;
+   eina_lock_take(&_environ_lock);
+#ifdef HAVE_CLEARENV
+   clearenv();
+#else
+   environ = NULL;
+#endif
+   _env_sync(pd, td);
+   eina_lock_release(&_environ_lock);
+}
+
 EOLIAN static Eina_Bool
 _efl_loop_efl_task_run(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED)
 {
index 1ecdd68..6531086 100644 (file)
@@ -127,6 +127,7 @@ class Efl.Loop (Efl.Task)
       Efl.Object.destructor;
       Efl.Object.provider_find;
       Efl.Task.env { set; get; }
+      Efl.Task.env_reset;
       Efl.Task.run;
       Efl.Task.end;
    }
index 9a72774..d269773 100644 (file)
@@ -344,6 +344,13 @@ _efl_task_env_get(Eo *obj EINA_UNUSED, Efl_Task_Data *pd, const char *var)
 }
 
 EOLIAN static void
+_efl_task_env_reset(Eo *obj EINA_UNUSED, Efl_Task_Data *pd)
+{
+   if (pd->env) eina_hash_free(pd->env);
+   pd->env = NULL;
+}
+
+EOLIAN static void
 _efl_task_priority_set(Eo *obj EINA_UNUSED, Efl_Task_Data *pd, Efl_Task_Priority priority)
 {
    pd->priority = priority;
index e44f929..26ecb4b 100644 (file)
@@ -108,6 +108,9 @@ class Efl.Task (Efl.Object, Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer)
                               is $NULL or if it is an empty string ]]
          }
       }
+      env_reset {
+         [[ Clear all environment variables. ]]
+      }
       @property priority {
          [[ The priority of this task. ]]
          get { }