@@ -13,6 +13,8 @@ public class BookmarkDataProvider : IBookmarkData
1313
1414 private static readonly Logger _logger = LogManager . GetCurrentClassLogger ( ) ;
1515
16+ private readonly Lock _bookmarkListLock = new ( ) ;
17+
1618 #endregion
1719
1820 #region cTor
@@ -49,7 +51,10 @@ public BookmarkDataProvider (SortedList<int, Entities.Bookmark> bookmarkList)
4951
5052 public void SetBookmarks ( SortedList < int , Entities . Bookmark > bookmarkList )
5153 {
52- BookmarkList = bookmarkList ;
54+ lock ( _bookmarkListLock )
55+ {
56+ BookmarkList = bookmarkList ;
57+ }
5358 }
5459
5560 public void ToggleBookmark ( int lineNum )
@@ -66,17 +71,26 @@ public void ToggleBookmark (int lineNum)
6671
6772 public bool IsBookmarkAtLine ( int lineNum )
6873 {
69- return BookmarkList . ContainsKey ( lineNum ) ;
74+ lock ( _bookmarkListLock )
75+ {
76+ return BookmarkList . ContainsKey ( lineNum ) ;
77+ }
7078 }
7179
7280 public int GetBookmarkIndexForLine ( int lineNum )
7381 {
74- return BookmarkList . IndexOfKey ( lineNum ) ;
82+ lock ( _bookmarkListLock )
83+ {
84+ return BookmarkList . IndexOfKey ( lineNum ) ;
85+ }
7586 }
7687
7788 public Entities . Bookmark GetBookmarkForLine ( int lineNum )
7889 {
79- return BookmarkList [ lineNum ] ;
90+ lock ( _bookmarkListLock )
91+ {
92+ return BookmarkList [ lineNum ] ;
93+ }
8094 }
8195
8296 #endregion
@@ -116,6 +130,7 @@ public int FindPrevBookmarkIndex (int lineNum)
116130
117131 public int FindNextBookmarkIndex ( int lineNum )
118132 {
133+
119134 var values = BookmarkList . Values ;
120135 for ( var i = 0 ; i < BookmarkList . Count ; ++ i )
121136 {
@@ -130,19 +145,25 @@ public int FindNextBookmarkIndex (int lineNum)
130145
131146 public void RemoveBookmarkForLine ( int lineNum )
132147 {
133- _ = BookmarkList . Remove ( lineNum ) ;
148+ lock ( _bookmarkListLock )
149+ {
150+ _ = BookmarkList . Remove ( lineNum ) ;
151+ }
152+
134153 OnBookmarkRemoved ( ) ;
135154 }
136155
137156 //TOOD: check if the callers are checking for null before calling
138157 public void RemoveBookmarksForLines ( IEnumerable < int > lineNumList )
139158 {
140159 ArgumentNullException . ThrowIfNull ( lineNumList , nameof ( lineNumList ) ) ;
141-
142- foreach ( var lineNum in lineNumList )
160+ lock ( _bookmarkListLock )
143161 {
144- _ = BookmarkList . Remove ( lineNum ) ;
162+ foreach ( var lineNum in lineNumList )
163+ {
164+ _ = BookmarkList . Remove ( lineNum ) ;
145165
166+ }
146167 }
147168
148169 OnBookmarkRemoved ( ) ;
@@ -152,20 +173,31 @@ public void RemoveBookmarksForLines (IEnumerable<int> lineNumList)
152173 public void AddBookmark ( Entities . Bookmark bookmark )
153174 {
154175 ArgumentNullException . ThrowIfNull ( bookmark , nameof ( bookmark ) ) ;
176+ lock ( _bookmarkListLock )
177+ {
178+ BookmarkList . Add ( bookmark . LineNum , bookmark ) ;
179+ }
155180
156- BookmarkList . Add ( bookmark . LineNum , bookmark ) ;
157181 OnBookmarkAdded ( ) ;
158182 }
159183
160184 public void ClearAllBookmarks ( )
161185 {
186+ #if DEBUG
162187 _logger . Debug ( CultureInfo . InvariantCulture , "Removing all bookmarks" ) ;
163- BookmarkList . Clear ( ) ;
188+ #endif
189+ lock ( _bookmarkListLock )
190+ {
191+ BookmarkList . Clear ( ) ;
192+ }
193+
164194 OnAllBookmarksRemoved ( ) ;
165195 }
166196
167197 #endregion
168198
199+ #region Event invokers
200+
169201 protected void OnBookmarkAdded ( )
170202 {
171203 BookmarkAdded ? . Invoke ( this , EventArgs . Empty ) ;
@@ -180,4 +212,7 @@ protected void OnAllBookmarksRemoved ()
180212 {
181213 AllBookmarksRemoved ? . Invoke ( this , EventArgs . Empty ) ;
182214 }
215+
216+ #endregion
217+
183218}
0 commit comments