крушение сервера на Noteupdate

Тема в разделе "Lotus - Программирование", создана пользователем Vvv, 5 окт 2009.

  1. Vvv

    Vvv Гость

    Пожалуйста посоветуйте как можно решить проблемму.
    Принимаются любые идеи (не только с domino с api) так как бьюсь уже неделю

    Есть мой addin на c api. если мой addin не работает то куршений нет.
    При одновременном обращении к одной и той же базе моего addin и nIMAP происходит крушение сервера

    ############################################################
    ### FATAL THREAD 7/10 [ nIMAP: 0c70: 0154]
    ### FP=0x13a3f444, PC=0x602774b7, SP=0x13a3f444
    ### stkbase=13a40000, total stksize=262144, used stksize=3004
    ### EAX=0x00000000, EBX=0x60c9ddf8, ECX=0x13a3f800, EDX=0x00ebeed0
    ### ESI=0x00000000, EDI=0x13a3f800, CS=0x0000001b, SS=0x00000023
    ### DS=0x00000023, ES=0x00000023, FS=0x0000003b, GS=0x00000000 Flags=0x00010202
    Exception code: c0000005 (ACCESS_VIOLATION)
    ############################################################
    @[ 1] 0x602774b7 nnotes.CIMsgMimeDirectoryStreamStore::GetHeaderStream+71 (ebed34,ebeed0,13a3f800,13a3f7f0)
    @[ 2] 0x602447c9 nnotes.CIMsgImport::RewriteHeaders+233 (13a3f83c,ebed34,0,13a3f834)
    @[ 3] 0x6027a2d7 nnotes.CIMsgMimeDirectoryStore::GetSomeHeaders+87 (ebed34,0,13a3f9f9,0)
    @[ 4] 0x60278cb8 nnotes.MDGetSomeHeaders@28+40 (ebed34,0,13a3f9f9,0,0,0,0)
    @[ 5] 0x004075be nIMAP.FormatBodyPart+990 (13a3fed8,1,0,56b0850,0,0,0)
    @[ 6] 0x00408f83 nIMAP.FormatData+675 (2a465ac,56b0850,56b0a2c,13400001,0,0,0)
    @[ 7] 0x00409891 nIMAP.ResponseProcess+1457 (11b,13400001,e72ee8,3,0,0,0)
    @[ 8] 0x00418e04 nIMAP.IMAPThreadProc@4+836 (0)
    @[ 9] 0x600fe6ef nnotes.ThreadWrapper@4+175 (0)
    [10] 0x7c80b713 kernel32.GetModuleFileNameA+436


    Крушение на вызове моим addin функции NSFNoteUpdate
    @[19] 0x6012228b nnotes.NSFNoteUpdate@8+27 (2,0)

    те hendle note 2, update_flags - флаг обновления 0 (в других задачах флаг 0 работает нормально)

    Сам считаю что пути решения
    1) как то проверять что note занята другим процессом (как проверить не знаю)
    2) использовать какой то из этих флагов обновления

    UPDATE_FORCE - Do an update or delete even if some other user has updated the note between the time the note was read into memory and the time we try to write it. This flag is appropriate for both updating and deleting a note.

    UPDATE_NAME_KEY_WARNING - Give an error if the updated note contains a new field name that wasn't already defined in one of the forms in the database. This flag is appropriate for updating a note only.

    UPDATE_NOCOMMIT - Do not flush all data to disk after the update. The note will be updated by the system, but non-summary data may not be immediately written to disk. This may improve the speed of NSFNoteUpdate if many operations are to be done sequentially, but risks loss of data if the machine crashes before data can be flushed to the disk. Summary data is always written to disk regardless of whether this flag is set or clear. This flag is appropriate for both updating and deleting a note.

    UPDATE_NOREVISION - Do not maintain revision history. This flag is appropriate for updating a note only.

    UPDATE_NOSTUB - Leave no trace of the note in the database if the note is deleted. This flag is only appropriate for deleting a note. You can use this flag on a deletion stub by removing the RRV_DELETED flag from the note id of the deletion stub before calling NSFNoteDelete or NSFNoteDeleteExtended. Once the deletion stub is removed, the deletion of the note will not be replicated. Otherwise, UPDATE_NOSTUB is only useful for applications that do NOT use views, and do not replicate. For example, a gateway may periodically examine a mail.box file, using NSFSearch and simply delete a document (using UPDATE_NOSTUB) when it's done with it. The database does not replicate, nor does it need views. UPDATE_NOSTUB ensures that there is minimum waste space allocated to stubs that are never needed in a highly volatile request-style database. Documents that are deleted with UPDATE_NOSTUB will still appear in the Domino views of the database and may cause problems when replicated. The documents themselves will not exist in the database and therefore cannot be opened.

    UPDATE_INCREMENTAL - Compute incremental note info.

    UPDATE_DELETED - The current update is a step in the process of deleting a note. API programs only use this flag in the context of a database hook driver. See Data Type DBHOOKVEC. Normally, API programs do not set this flag in calls to NSFNoteUpdate or NSFNoteDelete. NSFNoteDelete specifies this flag when it calls NSFNoteUpdate in the process of writing the deletion stub to the disk.

    UPDATE_DUPLICATES - Obsolete. Allow duplicate items of the same name. This flag is appropriate for updating a note only.

    UPDATE_SHARE_SECOND - Extended (32-bit DWORD) option: Split the second update of this note with the Note Object Store.

    UPDATE_SHARE_OBJECTS - Extended (32-bit DWORD) option: Share only objects with the Note Object Store, not the summary information.


    посоветйет пожалуйста что можно сделать
     
  2. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Этого не видно из приведённого куска NSD. Видно, что падение в nIMAP. Как вы получаете хэндл ноты, передаваемый в NSFNoteUpdate? Не происходит ли получение хэндла в одном потоке команд, а вызов NSFNoteUpdate в другом?
     
  3. Vvv

    Vvv Гость

    Этого не видно из приведённого куска NSD. Видно, что падение в nIMAP. Как вы получаете хэндл ноты, передаваемый в NSFNoteUpdate? Не происходит ли получение хэндла в одном потоке команд, а вызов NSFNoteUpdate в другом?

    Из приведенного куска NSD этого не видно. Но из части nsd было видно что мой addin при крушении делал update
    Я пробовал несколько раз крушение все время на update

    я закоментировал update крушения исчезли

    addin однопоточный но сначала берет все ноты которые будет обрабатывать потов в цикле обрабатывает
     
  4. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Охотно верю, но было бы проще если бы был приведён ещё и стек вашего addin'а, или весь nsd.
    А крушения всегда на nnotes.CIMsgMimeDirectoryStreamStore::GetHeaderStream ?
     
  5. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    хенды типа лонг или интежер? ;)
     
  6. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Думаю, я смогу ответить. Если это настоящий Addin, то он либо C/C++, либо на Java. Т.к. речь про NSFNoteUpdate, то остаётся только C/C++. В Notes С API хэндлы ноты имеют тип NOTEHANDLE, которые под Win32 определяются как unsigned int, т.е. беззнаковое четырёхбайтное целое.
     
  7. Vvv

    Vvv Гость

    addin написан на C
    определенеи хендлера такое - NOTEHANDLE hNote = NULLHANDLE;


    #if defined(DOSW16)
    typedef unsigned int HANDLE; /* really a short, but compiler is picky */
    #elif defined(HANDLE_IS_32BITS)
    typedef unsigned int HANDLE; /* 32-bit HANDLEs */
    #else
    typedef unsigned short HANDLE;
    #endif

    соотвественно - typedef unsigned int HANDLE; /* 32-bit HANDLEs */

    я подготовлю полный nsd и виложу но формальное крушение в nIMAP завивист от update в моем addin без update все нормально
     
  8. Vvv

    Vvv Гость

    TIA я прекрпеил полный nsd log посмотрите пожалуйста
     

    Вложения:

  9. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Я правильно понимаю, что ваши процессы называются addin1, addin2, addin3? Или какой-то один из них? Они одинаковы по содержанию? Пока попробуйте отключить антивирус, продолжаться ли падения?
     
  10. Vvv

    Vvv Гость

    антивируса нет, это тестовый сервер для разработки
    addin1, addin2, addin3 да это они
    update в addin1 влияет на падения, остальные не влияют не как
     
  11. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Ещё отключите экстеншен менеджер nXXEX.

    А вот это что за dll грузится?
    C:\Documents and Settings\All Users\Application Data\Protea AntiVirus Tools\vbd\vbengnt.dll
    Или она только для ваших процессов ?
     
  12. Vvv

    Vvv Гость

    vbengnt.dll грузиться но сам антивирус нет
    nXXEX сейчас попробую отключить как то не подумал попробовать без него

    nXXEX не влияет без нее так же падает
     
  13. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Я так понял, что аддын сканирует директорию, в некоторых БД из директории перебирает документы, извлекает вложения, и что-то с ними делает. А что сохраняется?
    Что аддын в двух словах делает?
    Смотрю, базы типа s2 похожи на почтовые, они и сканируются?
     
  14. Vvv

    Vvv Гость

    документы, извлекает вложения, и что-то с ними делает. А что сохраняется?
    Что аддын в двух словах делает?

    Смотрю, базы типа s2 похожи на почтовые, они и сканируются?
    да базы почтовые.
    когда один из addin сканирует базу я пытаюсь прочитать почту по IMAP и происходит крешь
     
Загрузка...

Поделиться этой страницей