> -- hothing писал(а):
> [list][*] При компиляции больших списков модулей падает, если символьные файлы не созданы.Трап, странный и не рабочий - мешанина символов.[/*]
Это скорее всего из-за коллизии при создании временных файлов.

Вот мы обсуждали как-то эту проблему. Если создается больше 200 временных файлов в секунду. То это теоретически может объяснить баг.
## Код:
```
PROCEDURE CreateFile (f: File; VAR res: INTEGER);
      VAR num, n: INTEGER;
   BEGIN
      IF f.name = "" THEN
         num := WinApi.GetTickCount(); n := 200;
         REPEAT
            GetTempFileName(f.loc.path, f.name, num); INC(num); DEC(n);
            OpenFile(create, f.name, f.ref, res)
         UNTIL (res # fileExistsErr) & (res # alreadyExistsErr) & (res # paramErr) OR (n = 0)
      ELSE
         OpenFile(f.state, f.name, f.ref, res)
      END
   END CreateFile;
```

Это реально слабое место в системе. Но пока так.

В версии для Linux вот так сделано

## Код:
```
PROCEDURE GetTempFileName (IN path: FullName; OUT name: FullName; num: INTEGER);
      VAR i: INTEGER; str: ARRAY 16 OF CHAR;
   BEGIN
      str := tempName; i := 7;
      WHILE i > 2 DO
         str[i] := CHR(num MOD 10 + ORD("0")); DEC(i); num := num DIV 10
      END;
      Append(path, str, "", 8, name)
   END GetTempFileName;
   
   PROCEDURE CreateFile (f: File; VAR res: INTEGER);
      VAR num, n: INTEGER;
   BEGIN
      IF f.name = "" THEN
         num := LinLibc.clock(); n := 200;
         REPEAT
            GetTempFileName(f.loc.path, f.name, num); INC(num); DEC(n);
            OpenFile(create, f.name, f.ref, res)
         UNTIL (res # fileExistsErr) OR (n = 0)
      ELSE
         OpenFile(f.state, f.name, f.ref, res)
      END
   END CreateFile;
```
