"Ночные" сборки KolibriOS

Share your distros and discuss others'
  • После ревизии 6333 не запускается по ассоциации zSea.

    Это может быть следствие того, что ФМ не меняют рабочую директорию перед запуском программы?
    to infinity and beyond
  • punk_joker
    Нет, это я поменял алгоритм загрузки приложения. Буду разбираться.
  • Есть подозрение что сист. ф. 68.20 - перераспределить блок памяти в случае не возможности выделить новую память возвращает в eax не 0 как написано в документации, а значение из указателя edx при входе в функцию.
    Пробовал в virtualbox создавать виртуальную систему с памятью 128 Мб. Запускал в ней программу animage, которая выделяла 210 Мб (5 буферов под фотографию 14 Мп), и программа вела себя нормально не выдавая никаких сообщений о нехватке памяти. Потом при попытках редактирования изображения сразу закрывалась, очевидно лезла на нехватающую память.
  • IgorA
    Там скорее другое. Память выделяется не сразу, а по мере обращения к страницам, в обработчике страничных ошибок. Когда обработчик не может выделить новую страницу он прибивает процесс.
  • Так может при выделении адресов нужно хотя-бы проверять количество свободной памяти?

    IgorA
    А 5 буферов выделяются одним блоком или по отдельности?
  • r6371.

    Писал программу и заметил баг, связанный с сис. функцией 47 (вывод числа в окно). Тест, проводил на реальном железе.

    Если в функции, установить бит увеличения шрифта, с любым множителем, кроме нулевого (например: 0x11ff0000), то, если после этого, попытаться передвинуть окно, больше 1 раза, то окно, намертво виснет. Или может, я чего напутал? Доска отладки, ничего не показывает.

    Code: Select all

    mcall 47, 0x00080100, 0x11223344, <10, 70>, 0x11ff0000
    Прикрепил тестовый код.
    Attachments
    PrintN.7z (5.97 KiB)
    Downloaded 306 times
  • Pathoswithin wrote:Так может при выделении адресов нужно хотя-бы проверять количество свободной памяти?
    функцией 18.16 ? Надо попробовать.
    Pathoswithin wrote:А 5 буферов выделяются одним блоком или по отдельности?
    блок один, а для разделения просто ставятся указатели
  • Я имел в виду, что если может возникнуть такая проблема, то может в ядре нужно проверять количество свободной памяти перед выделением адресов...

    Yason, обрати внимание, что в функции 47 младший бит увеличения шрифта соответствует параметру "неперемещаемое окно" в функции 0.
  • Yason, обрати внимание, что в функции 47 младший бит увеличения шрифта соответствует параметру "неперемещаемое окно" в функции 0.
    Ясно. Не обратил внимание на то, что в примере из дистра, в вызове сис. функции 0, макросом mcall, нет принудительной очистки регистра esi.

    Спасибо, за подсказку! :)
  • Это уже не актуально viewtopic.php?f=5&t=1602&start=990#p57305
    Serge пофиксил #6318
  • PDF ассоциаций в ФМ не было.
    Fplay ассоциации в KFM и KFAR прописаны были не правильно.

    Fixed.
    Из хаоса в космос
  • Code: Select all

    ======================================================================
    ========== Функция 68, подфункция 12 - выделить блок памяти. =========
    ======================================================================
    Параметры:
      * eax = 68 - номер функции
      * ebx = 12 - номер подфункции
      * ecx = требуемый размер в байтах
    Возвращаемое значение:
      * eax = указатель на выделенный блок
    Замечания:
      * Предварительно следует инициализировать кучу процесса вызовом
        подфункции 11.
      * Функция выделяет целое число страниц (4 Кб) так, что фактический
        размер выделенного блока больше или равен запрошенному.
     
    ---------------------- Константы для регистров: ----------------------
      eax - SF_SYS_MISC (68)
      ebx - SSF_MEM_ALLOC (12)
    Что возвращается в случае неудачи?
    0, -1, ... ?
    Из хаоса в космос
  • Очевидно, что NULL, указатель всё-таки. Вот выход из user_alloc:

    Code: Select all

    .m_exit:
            mov     ecx, [current_process]
            lea     ecx, [ecx+PROC.heap_lock]
            call    mutex_unlock
     
            xor     eax, eax
            pop     edi
            pop     esi
            pop     ebx
            ret
    
  • Я написал программу, она пытается сделать malloc очень большого размера и на выходе я ожидаю нолу, а получаю какое-то число.
    Ядерщики, посмотрите, пожалуйста.
    Attachments
    malloc_fail.zip (1.52 KiB)
    Downloaded 192 times
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 7 guests