From: Michael R. <mr...@us...> - 2005-10-13 01:24:42
|
Hi Barry, > NO. The engine is playing. My code does not use pause only play and > stop. What? It gets even stranger. Who did revoke the ticket then? > I'm using xine lib 1.1.0 with my own patches. In xine.c I'm > patching in time stamps for the logs. > Its in the second if. Here is the routine with line numbers from my > source: > > 127: static void ticket_acquire(xine_ticket_t *this, int > irrevocable) { > 128: > 129: pthread_mutex_lock(&this->lock); > 130: 131: if (this->ticket_revoked && !this->irrevocable_tickets) > 132: pthread_cond_wait(&this->issued, &this->lock); > 133: else if (this->atomic_revoke && !pthread_equal(this- > >atomic_revoker_thread, pthread_self())) > 134: pthread_cond_wait(&this->issued, &this->lock); > 135: 136: this->tickets_granted++; > 137: if (irrevocable) > 138: this->irrevocable_tickets++; > 139: 140: pthread_mutex_unlock(&this->lock); 141: } I see, so someone did an atomic revoke (setting this->atomic_revoke to 1), but never finished the job and never reissued the ticket. There are only a couple of places in xine-engine, where atomic revokes are made and they should all be non-blocking, but obviously, something is wrong here. Could you find out, who is calling ticket- >revoke(something, 1)? (The last parameter specifies atomic revokes.) Only the engine is allowed to call this function, so you have to look in xine-lib/src/xine-engine only. > Are you asking for the printf's to get around the line number problem? Yes. No need for this any more. Michael |