@@ -97,9 +97,11 @@ static void* tileRendererWorker(void* data_)
9797 break ;
9898 }
9999 case RenderState::QUIT:
100+ pthread_exit (nullptr );
100101 return nullptr ;
101102 }
102103 }
104+ pthread_exit (nullptr );
103105 return nullptr ;
104106}
105107
@@ -112,14 +114,14 @@ TileRendererData& WasmDocumentExtension::startTileRenderer(int32_t viewId_, int3
112114{
113115 long w, h;
114116 pClass->getDocumentSize (this , &w, &h);
115- pthread_t & threadId = tileRendererThreads_.emplace_back ();
116- TileRendererData& data
117- = tileRendererData_. emplace_back ( this , viewId_, tileSize_, w, h, threadId );
118- if (pthread_create (&threadId , nullptr , tileRendererWorker, &data))
117+ pthread_t & thread = tileRendererThreads_.emplace_back ();
118+ TileRendererData& data = tileRendererData_. emplace_back ( this , viewId_, tileSize_, w, h,
119+ tileRendererThreads_. size () );
120+ if (pthread_create (&thread , nullptr , tileRendererWorker, &data))
119121 {
120122 std::abort ();
121123 }
122- pthread_detach (threadId );
124+ pthread_detach (thread );
123125
124126 return data;
125127}
@@ -135,18 +137,18 @@ void WasmDocumentExtension::stopTileRenderer(int32_t viewId)
135137 TileRendererData* data = &*it;
136138 changeState (data, RenderState::QUIT);
137139
138- auto threadIt = std::find_if (tileRendererThreads_.begin (), tileRendererThreads_.end (),
139- [data](const pthread_t & threadId)
140- { return pthread_equal (threadId, data->threadId ); });
140+ auto threadIt = tileRendererThreads_[data->threadId ];
141141
142- if (threadIt != tileRendererThreads_.end ())
143- {
144- pthread_join (*threadIt, nullptr );
145- tileRendererThreads_.erase (threadIt);
146- }
142+ pthread_join (threadIt, nullptr );
143+ // Don't erase it, since the position is used as an ID now
144+ // tileRendererThreads_.erase(threadIt);
147145 delete[] data->paintedTile ;
148146 delete data;
149147 }
148+ else
149+ {
150+ SAL_WARN (" tile" , " missing tile render data" );
151+ }
150152}
151153
152154void TileRendererData::pushInvalidation (uint32_t invalidation[4 ])
@@ -297,12 +299,11 @@ WasmDocumentExtension::loadFromExpanded(LibreOfficeKit* pThis,
297299 comphelper::OStorageHelper::SetIsExpandedStorage (true );
298300 comphelper::OStorageHelper::SetExpandedStorage (xStorage);
299301
300-
301302 /*
302303 storage instance MUST be set before storage base
303304 instance and base are the same objects, just casted differently
304305 instance is stored in an uno::Reference while base is stored in a shared_ptr
305-
306+
306307 if the base is released first (as the shared_ptr is set), the uno reference
307308 has a bad time when it tries to access a null object at with it's pointer
308309 */
0 commit comments