На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование под PalmOS"
Правила раздела просты:
1. Будьте вежливыми.
2. Задавате вопросы только по теме. Пользовательские вопросы (у меня не работает пальм) являются оффтопиком. Пользуйтесь конференциями palmz.in, hpc.ru, ihand.ru .
3. Поиск вареза запрещен.
4. Пользуйтесь поиском. Не надейтесь, что кому-то доставляет удовольствие отвечать в сотый раз на один и тот же вопрос.
Страницы: (4) 1 2 [3] 4  все  ( Перейти к последнему сообщению )  
> Известные баги PalmOS 5.4, tt5 как источник халявного секса
    вот. написал мульку. вопрос - а почему пальмовцы сами до этого не додумались?
    http://palmz.in/board/index.php?showtopic=28056
      о, спасибо! полезно.

      ты просто пробегаешь по базам и делаешь всем syncdatabase?

      Добавлено
      Цитата igor_n @
      вопрос - а почему пальмовцы сами до этого не додумались?

      ну так наверное как обычно - в следующем пачте сделают. у них же все так - постепенное эволюционное развитие на своих ляпах и их решений сторонними писателями. :)
        я не нашел как из арма вызвать DmSyncDatabase. Поэтому просто закрываю все базы, открытые в режиме записи.
          Игорь - это что-то... Меня уже забадали вечные слёты преференсов, я их даже на карте специально держу для быстрого востановления машинки. Щас будем тестить. Сенкс.
          Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
            Может кто сможет объяснить.

            Проблемы с Tungsten X. Если после soft-reset (обязательное условие) выполнять вот такой код:

            ExpandedWrap disabled
              MemHandle new_record=DmResizeRecord(db,index,record_size);
              if(new_record!=NULL)
                 {
                  new_record=DmGetRecord(db,index);
                  UtilsDmWriteCheck(new_record,0,record,record_size);
                  DmReleaseRecord(db,index,true);
                 }

            То после нескольких итераций (например семи) происходит софт-ресет девайса при выполнении DmResizeRecord, а симулятор просто закрывается с ошибкой. Все параметры с виду в норме. И это только на TX! На других машинках с NVFS проблем не замечено.

            Заменяем DmResizeRecord на свою реализацию:

            ExpandedWrap disabled
              static MemHandle PrvResizeRecord(DmOpenRef db,UInt16 index,UInt32 new_size)
              {
               MemHandle record=DmGetRecord(db,index);
               if(record!=NULL)
                  if(MemHandleResize(record,new_size)!=errNone)
                    {
                     DmReleaseRecord(db,index,false);
                     record=NULL;
                    }
               return record;
              }

            И соответственно немного правим код:

            ExpandedWrap disabled
               MemHandle new_record=PrvResizeRecord(db,index,record_size);
               if(new_record!=NULL)
                 {
                  UtilsDmWriteCheck(new_record,0,record,record_size);
                  DmReleaseRecord(db,index,true);
                 }

            Теперь нет проблем!

            Что это может быть? Где моя ошибка? Пробовал после DmResizeRecord не вызывать DmGetRecord, но это не влияет на результат.

            Это сообщение было перенесено сюда или объединено из темы "DmResizeRecord на TX"
              Ага. Мир NVFS, жестокий и беспощадный. Это баги, внесенные в 5.4.9 изменением функциональности.

              Попробуй запустить свой код под дебажным симулятором с подключенным репортером, я думаю что вылезут интересные сообщения.

              Это сообщение было перенесено сюда или объединено из темы "DmResizeRecord на TX"
                Сейчас попробую. Кстати, как я говорил сам дебажный симулятор падает при выполнении DmResizeRecord.

                Это сообщение было перенесено сюда или объединено из темы "DmResizeRecord на TX"
                  Было у меня подозрение, что с resize неладно: Известные баги PalmOS 5.4 сообщение #20.

                  Это сообщение было перенесено сюда или объединено из темы "DmResizeRecord на TX"
                    Reporter вообще ничего сказать не успевает :)

                    -юсртыхэю
                    Цитата igor_n @
                    Было у меня подозрение, что с resize неладно: Известные баги PalmOS 5.4 сообщение #20.

                    Я не думал, что стоит делать DmGetRecord перед DmResizeRecord. Она же (Resize) принимает в параметрах индекс записи, а не Handle.

                    Но вот попробовал вставить - и на симуляторе все заработало!

                    Я говорил, что для воспроизведения проблемы необходимо выполнить soft-reset. Вероятно, система не может найти запись в DbCache, и рушится.

                    Таким образом, думаю тему можно закрыть:

                    Либо не сипользовать DmResizeRecord, а реализовывать вручную.
                    Либо делать DmGetRecord перед использованием DmResizeRecord.

                    P.S. Может эту инфу добавить в "Известные баги..."?

                    Это сообщение было перенесено сюда или объединено из темы "DmResizeRecord на TX"
                      Интересное в камне. Выставка чудес.


                      В отладочных тулзах от пальмвана есть простая утилитка MemInfo. Она показывает размеры все хипов: динамического, кэша и стораджа. Что интересно:
                      • она написана как нативная армовая программа. то есть писали не совсем лохи.
                      • она не использует недокументированных сисколлов
                      • в ней реализованы два способа сброса кэша
                      • первый способ - попытка выделения блока размером 1 << 31 байт в куче кэша
                      • второй способ - посылка нотификаций hots и sync

                      Внимание вопрос: они что, сами не знают как проще сбросить? или просто никак не сбросишь?
                        Что за тулза, впервые слышу? Можно ли ссылочку? В PluggedIn не нашел.
                        Интересно, посмотреть, может хоть она работает? Потому что все мои попытки очистить кэш на 5.4.8 провалились.
                          поищи там Palm_SDK_Utilities.zip. со ссылками сам знаешь, там плохо.
                            Игорь, о каком именно Palm_SDK_Utilities.zip ты говоришь?

                            Да, есть такой файл в Palm SG SDK (у меня версия за октябрь 2005).

                            Внутри этого файла только три папки - FakeCamera, tipsAndTutorial, VMFontLibrary. Никаких исходиников там нет.

                            Пример MemoryInfoдействительно присутствует в этом SDK, но там только получение информации и никаких операций с DbCache.
                              а это такой прикол от пальмвана. они время от времени втихую апдейтят свои тулзы и документацию. так что просто скачай новую версию.
                                Точно, Utils они обновили, и в них есть MemoryInfo.prc
                                На TX освобождает кэш только по "MemFill". По "Hotsync" кэш только забивается.
                                Пробовал
                                Цитата
                                попытка выделения блока размером 1 << 31 байт в куче кэша
                                через MemChunkNew- пока не получилось. Никто больше не пробовал?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 2 [3] 4  все


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1217 ]   [ 18 queries used ]   [ Generated: 10.12.19, 07:35 GMT ]