We are dynamically populating a .Net treeview control with entries from a Notes ViewNavigator by passing in the Position value of the TreeNode being populated in order to retreive the Sibling values. Intermittently the call to Domino.NotesViewNavigator.GetCurrent after the SetPos Method generates an .Net AccessViolation with a matching crash in the Notes console log:
(207-28 [207]) GET_COLLATION: 15 ms. [12+14=26]
(208-28 [208]) READ_ENTRIES(REPCC256F4A:0003E562-NT00000636): 16 ms. [76+166=242]
Thread=[0158:0005-0700]
Stack base=0x0012D678, Stack size = -576 bytes
PANIC: m_cRef below 0
Below is a stripped down version of the function (Exception handling and object cleanup removed.)
Function GetFolderTreeItems(ByVal parentKeyASNavigatorPosition As String) As Collection
Dim myTreeBrowserDemoFolder As New TreeBrowserDemoFolderItem
Dim myCollection As New Collection
Dim myTreeBrowserDemoFolderTreeItem As TreeBrowserDemoFolderTreeItem
Dim myViewEntry As Domino.NotesViewEntry
Dim CurrentEntry As Domino.NotesViewEntry
Dim myViewEntryParent As Object = Nothing
Dim myViewNavOpenFolders As Domino.NotesViewNavigator '(Class var)
'Get a handle to the first view entry
If parentKey = "" Then
myViewEntry = myViewNavOpenFolders.GetFirst
Else
myViewNavOpenFolders.GotoPos(parentKey, ".")
myViewEntryParent = myViewNavOpenFolders.GetCurrent 'EAccessViolation
If Not (myViewEntryParent Is Nothing) Then
myViewEntry = myViewNavOpenFolders.GetChild(myViewEntryParent)
End If
End If
While Not (myViewEntry Is Nothing)
myTreeBrowserDemoFolderTreeItem = New TreeBrowserDemoFolderTreeItem
If myViewEntry.IsCategory = True Then
myTreeBrowserDemoFolderTreeItem.DisplayName = myViewEntry.ColumnValues(0)
myTreeBrowserDemoFolderTreeItem.Type = "Category"
myTreeBrowserDemoFolderTreeItem.NoChildren = myViewEntry.ChildCount
myTreeBrowserDemoFolderTreeItem.FolderID = myViewEntry.GetPosition(".")
Else
myTreeBrowserDemoFolderTreeItem.FolderID = myViewEntry.ColumnValues(2)
myTreeBrowserDemoFolderTreeItem.FolderName = myViewEntry.ColumnValues(3)
myTreeBrowserDemoFolderTreeItem.Type = "Folder"
End If
myCollection.Add(myTreeBrowserDemoFolderTreeItem)
CurrentEntry = myViewEntry
myViewEntry = myViewNavOpenFolders.GetNextSibling(CurrentEntry)
End While
Return myCollection
End Function
Thoughts? Advice? Our next step is to apply all maintenance and fix packs to the Server.
The Database being interrogated via the primary view can be upto 50GB in size. The Domino Server is running in a 1GB Windows XP virtual machine on a Windows 2003 server with a standard server install and untweaked Notes.ini and there is no other load other than the developer.