@@ -63,6 +63,8 @@ void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry)
6363 finish_command (& entry -> process );
6464
6565 hashmap_remove (hashmap , & entry -> ent , NULL );
66+ FREE_AND_NULL (entry -> to_free );
67+ entry -> cmd = NULL ;
6668}
6769
6870static void subprocess_exit_handler (struct child_process * process )
@@ -100,6 +102,7 @@ int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, co
100102 process -> trace2_child_class = "subprocess" ;
101103
102104 entry -> cmd = process -> args .v [0 ];
105+ entry -> to_free = NULL ;
103106
104107 err = start_command (process );
105108 if (err ) {
@@ -145,11 +148,13 @@ int subprocess_start_strvec(struct hashmap *hashmap,
145148 process -> trace2_child_class = "subprocess" ;
146149
147150 sq_quote_argv_pretty (& quoted , argv -> v );
148- entry -> cmd = strbuf_detach (& quoted , NULL );
151+ entry -> cmd = entry -> to_free = strbuf_detach (& quoted , NULL );
149152
150153 err = start_command (process );
151154 if (err ) {
152155 error ("cannot fork to run subprocess '%s'" , entry -> cmd );
156+ FREE_AND_NULL (entry -> to_free );
157+ entry -> cmd = NULL ;
153158 return err ;
154159 }
155160
@@ -158,6 +163,8 @@ int subprocess_start_strvec(struct hashmap *hashmap,
158163 err = startfn (entry );
159164 if (err ) {
160165 error ("initialization for subprocess '%s' failed" , entry -> cmd );
166+ FREE_AND_NULL (entry -> to_free );
167+ entry -> cmd = NULL ;
161168 subprocess_stop (hashmap , entry );
162169 return err ;
163170 }
0 commit comments