@@ -104,9 +104,11 @@ - (void)dealloc
104104
105105 // Read change counter from SQLite file header to detect changes made by other processes during this write
106106 uint32_t changeCounterBeforeBlock = 0 ;
107- lseek (changeCounterReadFileDescriptor, kSQLiteFileChangeCounterOffset , SEEK_SET);
108- read (changeCounterReadFileDescriptor, &changeCounterBeforeBlock, sizeof (uint32_t ));
109- changeCounterBeforeBlock = CFSwapInt32BigToHost (changeCounterBeforeBlock);
107+ if (changeCounterReadFileDescriptor > 0 ) {
108+ lseek (changeCounterReadFileDescriptor, kSQLiteFileChangeCounterOffset , SEEK_SET);
109+ read (changeCounterReadFileDescriptor, &changeCounterBeforeBlock, sizeof (uint32_t ));
110+ changeCounterBeforeBlock = CFSwapInt32BigToHost (changeCounterBeforeBlock);
111+ }
110112
111113 block (db);
112114
@@ -115,9 +117,11 @@ - (void)dealloc
115117
116118 // if more than 1 change during this expected write, either there's 2 queries in it (unexpected) or another process changed it
117119 uint32_t changeCounterAfterBlock = 0 ;
118- lseek (changeCounterReadFileDescriptor, kSQLiteFileChangeCounterOffset , SEEK_SET);
119- read (changeCounterReadFileDescriptor, &changeCounterAfterBlock, sizeof (uint32_t ));
120- changeCounterAfterBlock = CFSwapInt32BigToHost (changeCounterAfterBlock);
120+ if (changeCounterReadFileDescriptor > 0 ) {
121+ lseek (changeCounterReadFileDescriptor, kSQLiteFileChangeCounterOffset , SEEK_SET);
122+ read (changeCounterReadFileDescriptor, &changeCounterAfterBlock, sizeof (uint32_t ));
123+ changeCounterAfterBlock = CFSwapInt32BigToHost (changeCounterAfterBlock);
124+ }
121125
122126 if (changeCounterAfterBlock - changeCounterBeforeBlock > 1 ) [FCModel dataWasUpdatedExternally ];
123127 });
0 commit comments