Ticket #1677: dvbsiparser.diff
File dvbsiparser.diff, 2.5 KB (added by , 18 years ago) |
---|
-
dvbsiparser.cpp
114 114 115 115 /* Set flag so other processes can get past pollLock */ 116 116 filterChange = true; 117 pollLock.lock();118 117 118 QMutexLocker locker(&pollLock); 119 119 120 filterChange = false; 120 121 121 122 PIDFDMap::Iterator it; … … 124 125 { 125 126 if (it.data().pid == pid) 126 127 { 127 pollLock.unlock();128 128 return; 129 129 } 130 130 } … … 147 147 if (fd == -1) 148 148 { 149 149 ERRNO(QString("Failed to open section filter (pid %1)").arg(pid)); 150 pollLock.unlock();151 150 return; 152 151 } 153 152 154 153 if (ioctl(fd, DMX_SET_BUFFER_SIZE, sect_buf_size) < 0) { 155 154 ERRNO(QString("Failed to set demux buffer size (pid %1)").arg(pid)); 156 pollLock.unlock();157 155 return; 158 156 } 159 157 160 158 if (ioctl(fd, DMX_SET_FILTER, ¶ms) < 0) 161 159 { 162 160 ERRNO(QString("Failed to set section filter (pid %1)").arg(pid)); 163 pollLock.unlock();164 161 return; 165 162 } 166 163 … … 175 172 pollArray[pollLength].revents = 0; 176 173 pollLength++; 177 174 178 pollLock.unlock();179 175 } 180 176 181 177 void DVBSIParser::DelPid(uint pid) … … 187 183 188 184 filterChange = true; 189 185 190 pollLock.lock();186 QMutexLocker locker(&pollLock); 191 187 192 188 filterChange = false; 193 189 … … 221 217 x++; 222 218 } 223 219 224 pollLock.unlock();225 220 } 226 221 227 222 void DVBSIParser::DelAllPids(void) … … 229 224 PIDFDMap::Iterator it; 230 225 231 226 filterChange = true; 232 pollLock.lock();227 QMutexLocker locker(&pollLock); 233 228 filterChange = false; 234 229 235 230 for (it = PIDfilterManager.begin() ; it != PIDfilterManager.end() ; ++it) … … 239 234 free(pollArray); 240 235 pollLength = 0; 241 236 pollArray = NULL; 242 243 pollLock.unlock();244 237 } 245 238 246 239 void DVBSIParser::StopSectionReader(void) … … 249 242 exitSectionThread = true; 250 243 DelAllPids(); 251 244 filterChange = true; 252 pollLock.lock();245 QMutexLocker locker(&pollLock); 253 246 filterChange = false; 254 247 free(pollArray); 255 pollLock.unlock();256 248 } 257 249 258 250 void DVBSIParser::StartSectionReader(void) … … 273 265 usleep(250); 274 266 processed = false; 275 267 276 pollLock.lock();268 QMutexLocker locker(&pollLock); 277 269 278 270 int ret = poll(pollArray, pollLength, 1000); 279 271 … … 326 318 pollArray[i].revents = 0; 327 319 } 328 320 } 329 330 pollLock.unlock();331 321 } 332 322 333 323 sectionThreadRunning = false;