@@ -60,6 +60,8 @@ void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry)
6060 finish_command (& entry -> process );
6161
6262 hashmap_remove (hashmap , & entry -> ent , NULL );
63+ FREE_AND_NULL (entry -> to_free );
64+ entry -> cmd = NULL ;
6365}
6466
6567static void subprocess_exit_handler (struct child_process * process )
@@ -97,6 +99,7 @@ int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, co
9799 process -> trace2_child_class = "subprocess" ;
98100
99101 entry -> cmd = process -> args .v [0 ];
102+ entry -> to_free = NULL ;
100103
101104 err = start_command (process );
102105 if (err ) {
@@ -142,11 +145,13 @@ int subprocess_start_strvec(struct hashmap *hashmap,
142145 process -> trace2_child_class = "subprocess" ;
143146
144147 sq_quote_argv_pretty (& quoted , argv -> v );
145- entry -> cmd = strbuf_detach (& quoted , NULL );
148+ entry -> cmd = entry -> to_free = strbuf_detach (& quoted , NULL );
146149
147150 err = start_command (process );
148151 if (err ) {
149152 error ("cannot fork to run subprocess '%s'" , entry -> cmd );
153+ FREE_AND_NULL (entry -> to_free );
154+ entry -> cmd = NULL ;
150155 return err ;
151156 }
152157
@@ -155,6 +160,8 @@ int subprocess_start_strvec(struct hashmap *hashmap,
155160 err = startfn (entry );
156161 if (err ) {
157162 error ("initialization for subprocess '%s' failed" , entry -> cmd );
163+ FREE_AND_NULL (entry -> to_free );
164+ entry -> cmd = NULL ;
158165 subprocess_stop (hashmap , entry );
159166 return err ;
160167 }
0 commit comments