LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Тут реально вся проблема в том, что в getenv() не используется лок. И это довольно просто починить было бы, но пришёл LamerOk и рассказывает, что портить память – это фича.

А мне кажется, надо было как в макоси сделать. Там setenv просто делает malloc, если новое значение больше старого, а старое утекает. Если меньше - то копирует поверх. Т.е. худший сценарий это утечка памяти, если setenv зовут в цикле с увеличивающейся строкой. Ну утечка и утечка, плевать вообще, в расте это даже не баг. Тут даже лок не надо делать, хотя есть шанс прочитать старое значение, наполовину переписанное новым. А если просто всегда делать malloc, то и этой проблемы не будет.

Исходная версия vbr, :

Тут реально вся проблема в том, что в getenv() не используется лок. И это довольно просто починить было бы, но пришёл LamerOk и рассказывает, что портить память – это фича.

А мне кажется, надо было как в макоси сделать. Там setenv просто делает malloc, если новое значение больше старого, а старое утекает. Если меньше - то копирует поверх. Т.е. худший сценарий это утечка памяти, если setenv зовут в цикле с увеличивающейся строкой. Ну утечка и утечка, плевать вообще, в расте это даже не баг. Тут даже лок не надо делать.