/[svn]/linuxsampler/trunk/src/common/SynchronizedConfig.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/common/SynchronizedConfig.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1643 by schoenebeck, Sun Oct 14 22:00:17 2007 UTC revision 1644 by persson, Sat Jan 19 16:55:03 2008 UTC
# Line 1  Line 1 
1  /***************************************************************************  /***************************************************************************
2   *                                                                         *   *                                                                         *
3   *   Copyright (C) 2006, 2007 Andreas Persson                              *   *   Copyright (C) 2006-2008 Andreas Persson                               *
4   *                                                                         *   *                                                                         *
5   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
6   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
# Line 79  namespace LinuxSampler { Line 79  namespace LinuxSampler {
79                       * time threads are locked anymore.                       * time threads are locked anymore.
80                       */                       */
81                      void Unlock() {                      void Unlock() {
82                            atomicSet(&flag, 0);
83                          atomicSet(&lock, 0);                          atomicSet(&lock, 0);
84                      }                      }
85    
# Line 88  namespace LinuxSampler { Line 89  namespace LinuxSampler {
89                      friend class SynchronizedConfig;                      friend class SynchronizedConfig;
90                      SynchronizedConfig& parent;                      SynchronizedConfig& parent;
91                      atomic_t lock;                      atomic_t lock;
92                        atomic_t flag;
93                      Reader *next; // only used locally in SwitchConfig                      Reader *next; // only used locally in SwitchConfig
94              };              };
95    
# Line 152  namespace LinuxSampler { Line 154  namespace LinuxSampler {
154          for (typename std::set<Reader*>::iterator iter = readers.begin() ;          for (typename std::set<Reader*>::iterator iter = readers.begin() ;
155               iter != readers.end() ;               iter != readers.end() ;
156               iter++) {               iter++) {
157              if (atomicRead(&(*iter)->lock)) {              atomicSet(&(*iter)->flag, 1);
158                if (atomicRead(&(*iter)->lock) && atomicRead(&(*iter)->flag)) {
159                  (*iter)->next = lockingReaders;                  (*iter)->next = lockingReaders;
160                  lockingReaders = *iter;                  lockingReaders = *iter;
161              }              }
# Line 163  namespace LinuxSampler { Line 166  namespace LinuxSampler {
166              usleep(50000);              usleep(50000);
167              Reader** prev = &lockingReaders;              Reader** prev = &lockingReaders;
168              for (Reader* p = lockingReaders ; p ; p = p->next) {              for (Reader* p = lockingReaders ; p ; p = p->next) {
169                  if (atomicRead(&p->lock)) prev = &p->next;                  if (atomicRead(&p->lock) && atomicRead(&p->flag)) prev = &p->next;
170                  else *prev = p->next; // unlink                  else *prev = p->next; // unlink
171              }              }
172          }          }

Legend:
Removed from v.1643  
changed lines
  Added in v.1644

  ViewVC Help
Powered by ViewVC