diff --git a/kernel/trunk/core/heap.inc b/kernel/trunk/core/heap.inc index 422911edff..18d324580a 100644 --- a/kernel/trunk/core/heap.inc +++ b/kernel/trunk/core/heap.inc @@ -596,7 +596,7 @@ endp align 4 proc user_alloc stdcall, alloc_size:dword push ebx esi edi - call init_heap + mov ebx, [current_process] lea ecx, [ebx+PROC.heap_lock] call mutex_lock mov ecx, [alloc_size] diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 5a25b9e3f5..867b8b6bf5 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -2577,7 +2577,9 @@ dword-значение цвета 0x00RRGGBB * 3 = RAW * 4 и выше зарезервировано * +8: более детально смотрите файл clipboard_container_rus.txt - + * Функция должна использоваться совместно с 68.11. Приложение должно + предварительно проинициализировать локальную кучу вызовом 68.11. + ---------------------- Константы для регистров: ---------------------- eax - SF_CLIPBOARD (54) ebx - SSF_READ_CB (1) @@ -2989,8 +2991,10 @@ IPC применяется для посылок сообщений от одн * eax = 1 - недостаточно памяти Замечания: * Есть другой способ выделения/освобождения динамической памяти - - подфункции 12, 13 и 20 функции 68, но после их использования будет - создана куча процесса и вызов функции 64 будет игнорироваться. + подфункции 11, 12, 13 функции 68. + * Функция не может использоваться совместно с 68.11, 68.12, 68.13. + Вызов функции будет игнорироваться, если приложение создаст + локальную кучу вызовом 68.11. ---------------------- Константы для регистров: ---------------------- eax - SF_MEMORY_RESIZE (64) @@ -3292,7 +3296,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); eax - SF_SYS_MISC (68) ebx - SSF_WRITE_MSR (4) ====================================================================== -= Функция 68, подфункция 11 - вручную инициализировать кучу процесса = +===== Функция 68, подфункция 11 - инициализировать кучу процесса. ==== ====================================================================== Параметры: * eax = 68 - номер функции @@ -3447,6 +3451,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Возвращаемое значение: * eax = указатель на перераспределённый блок, 0 при ошибке Замечания: + * Предварительно следует инициализировать кучу процесса вызовом + подфункции 11. * Функция выделяет целое число страниц (4 Кб) так, что фактический размер выделенного блока больше или равен запрошенному. * Если edx=0, то вызов функции эквивалентен выделению памяти @@ -3510,6 +3516,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * E_NOMEM = 30 * E_PARAM = 33 Замечания: + * Предварительно следует инициализировать кучу процесса вызовом + подфункции 11. * Если создаётся новая область, то флаги доступа устанавливают максимальные права доступа для остальных процессов. Попытка открытия другим потоком с неразрешёнными правами провалится @@ -3619,6 +3627,8 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * edx = размер загруженного файла или 0 Примечания: * функция загружает и, при необходимости, распаковывает файл (kunpack) + * Предварительно следует инициализировать кучу процесса вызовом + подфункции 11. ---------------------- Константы для регистров: ---------------------- eax - SF_SYS_MISC (68) diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 1e55722f89..a95845a1fb 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -2548,6 +2548,9 @@ Returned value: * eax = if successful - pointer to a memory with data * eax = 1 - error * eax = -1 - main list area not found +Remarks: + * The function must be used in conjunction with 68.11. The + application must pre-initialize the local heap by calling 68.11. ---------------------- Constants for registers: ---------------------- eax - SF_CLIPBOARD (54) @@ -2957,7 +2960,10 @@ Remarks: * There is another way to dynamically allocate/free memory - subfunctions 12, 13 and 20 of function 68, but after creation of the process heap 64 function call will be ignored. - + * The function cannot be used together with 68.11, 68.12, 68.13. + The function call will be ignored after creation of process heap + with function 68.11. + ---------------------- Constants for registers: ---------------------- eax - SF_MEMORY_RESIZE (64) ====================================================================== @@ -3258,7 +3264,7 @@ Remarks: eax - SF_SYS_MISC (68) ebx - SSF_WRITE_MSR (4) ====================================================================== -=== Function 68, subfunction 11 - manually initialize process heap === +=== Function 68, subfunction 11 - initialize process heap ============ ====================================================================== Parameters: * eax = 68 - function number @@ -3413,6 +3419,8 @@ Parameters: Returned value: * eax = pointer to the reallocated block, 0 = error Remarks: + * Before this call one must initialize process heap by call to + subfunction 11. * The function allocates an integer number of pages (4 Kb) in such way that the real size of allocated block is more than or equal to requested size. @@ -3475,6 +3483,8 @@ Error codes: * E_NOMEM = 30 * E_PARAM = 33 Remarks: + * Before this call one must initialize process heap by call to + subfunction 11. * If a new area is created, access flags set maximal rights for other processes. An attempt from other process to open with denied rights will fail with error code E_ACCESS. @@ -3584,6 +3594,8 @@ Returned value: * edx = size of the loaded file, or zero Remarks: * function loads file and unpacks, if necessary + * Before this call one must initialize process heap by call to + subfunction 11. ---------------------- Constants for registers: ---------------------- eax - SF_SYS_MISC (68)