История изменений
Исправление vbr, (текущая версия) :
Тут реально вся проблема в том, что в getenv() не используется лок. И это довольно просто починить было бы, но пришёл LamerOk и рассказывает, что портить память – это фича.
А мне кажется, надо было как в макоси сделать. Там setenv просто делает malloc, если новое значение больше старого, а старое утекает. Если меньше - то копирует поверх. Т.е. худший сценарий это утечка памяти, если setenv зовут в цикле с увеличивающейся строкой. Ну утечка и утечка, плевать вообще, в расте это даже не баг. Тут даже лок не надо делать, хотя есть шанс прочитать старое значение, наполовину переписанное новым. А если просто всегда делать malloc, то и этой проблемы не будет.
Исходная версия vbr, :
Тут реально вся проблема в том, что в getenv() не используется лок. И это довольно просто починить было бы, но пришёл LamerOk и рассказывает, что портить память – это фича.
А мне кажется, надо было как в макоси сделать. Там setenv просто делает malloc, если новое значение больше старого, а старое утекает. Если меньше - то копирует поверх. Т.е. худший сценарий это утечка памяти, если setenv зовут в цикле с увеличивающейся строкой. Ну утечка и утечка, плевать вообще, в расте это даже не баг. Тут даже лок не надо делать.