<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dcpomatic/src/lib/player.h, branch laszlo</title>
<subtitle>DCP-o-matic DCP tools</subtitle>
<id>https://git.carlh.net/cgit/dcpomatic/atom?h=laszlo</id>
<link rel='self' href='https://git.carlh.net/cgit/dcpomatic/atom?h=laszlo'/>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/'/>
<updated>2020-02-21T00:16:51Z</updated>
<entry>
<title>Missing #include.</title>
<updated>2020-02-21T00:16:51Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2020-02-21T00:16:51Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=ba285a1b873149f5b5d630ab7b136240cc27c8e2'/>
<id>urn:sha1:ba285a1b873149f5b5d630ab7b136240cc27c8e2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix deadlock during content examination.</title>
<updated>2020-02-16T20:23:42Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2020-01-28T22:23:47Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=4b38c8f429407ec09609236fc7b2349459536571'/>
<id>urn:sha1:4b38c8f429407ec09609236fc7b2349459536571</id>
<content type='text'>
Before this fix, the following situation could happen in threads
A and B:

A: Some DONE signal happens; this triggers setup_pieces which
   takes a lock on the player mutex.

B: FFmpegContent::examine takes a lock on the content mutex.
B: FFmpegContent::examine adds a stream
B: That causes STREAMS PENDING to be emitted.
B: This tries to take a lock on the player mutex so it can update _suspended

A: setup_pieces tries to access some content information, hence
   tries to take a lock on the content mutex.

Now B is holding the CL and awaiting the PL and A is holding
the PL and awaiting the CL.

It feels like the root cause of this is that while setup_pieces
is happening another change (which would itself cause setup_pieces)
is announced, and this isn't dealt with properly.

There are two steps here; _suspended is protected with an atomic
rather than using _mutex, and also it can cope with being updated
recursively.

Backported from df48c75c38dd788835a93540aea243a2dac4bb10 in v2.15.x
</content>
</entry>
<entry>
<title>Fix assumption of 48kHz DCP audio in AudioRingBuffers consistency check (#1436).</title>
<updated>2018-12-22T23:32:59Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-12-22T23:32:59Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=b73576594b252e033539bec964d72403d3775585'/>
<id>urn:sha1:b73576594b252e033539bec964d72403d3775585</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Build Empty objects from the presence or absence of decoders in</title>
<updated>2018-09-03T23:39:39Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-09-03T23:39:39Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=1938b1b08d38fc199717d1875a61ef05e5b965de'/>
<id>urn:sha1:1938b1b08d38fc199717d1875a61ef05e5b965de</id>
<content type='text'>
Pieces, rather than the presence or absence of content.  This seems better
because of cases like encrypted DCPs without a a KDM: here we may have content
but no decoder.
</content>
</entry>
<entry>
<title>Remove unnecessary subtitle scale (I think).</title>
<updated>2018-09-02T02:12:43Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-09-02T02:12:43Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=63a1ada934c258dfa60a92f7a406b084531856d9'/>
<id>urn:sha1:63a1ada934c258dfa60a92f7a406b084531856d9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Basics of splitting CCAP streams into different assets.</title>
<updated>2018-08-29T10:58:06Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-08-28T22:34:56Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=1db0293ad36605da9ca8daa8736ef581f4f6a34e'/>
<id>urn:sha1:1db0293ad36605da9ca8daa8736ef581f4f6a34e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove TextType from various places as (I believe) it can be inferred from the content.</title>
<updated>2018-08-23T10:19:06Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-08-23T10:19:06Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=7962e6cfd5fbd97e1e44aebe3fc190c62da027e9'/>
<id>urn:sha1:7962e6cfd5fbd97e1e44aebe3fc190c62da027e9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Similar pending/done for Film::Change.</title>
<updated>2018-08-19T12:55:46Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-08-19T12:55:46Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=4408e6eea87ce9630e71e4a7d40e2dade091b0ee'/>
<id>urn:sha1:4408e6eea87ce9630e71e4a7d40e2dade091b0ee</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Replace May/Done/NotDone signal sets with one signal and extend</title>
<updated>2018-08-19T00:29:04Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-08-19T00:04:59Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=6c7489e5d778d3e71065d88a094a7383ba2c117d'/>
<id>urn:sha1:6c7489e5d778d3e71065d88a094a7383ba2c117d</id>
<content type='text'>
this treatment to anything that caused Player::setup_pieces.  This should
fix out-of-sequence Player emissions caused by setup_pieces being called
by one thread while the butler is calling pass().
</content>
</entry>
<entry>
<title>Suspend butler on player may-change as otherwise there's a window</title>
<updated>2018-08-19T00:29:04Z</updated>
<author>
<name>Carl Hetherington</name>
<email>cth@carlh.net</email>
</author>
<published>2018-08-18T21:49:46Z</published>
<link rel='alternate' type='text/html' href='https://git.carlh.net/cgit/dcpomatic/commit/?id=9a27d60ea7888d300a5a2414a477091428589b82'/>
<id>urn:sha1:9a27d60ea7888d300a5a2414a477091428589b82</id>
<content type='text'>
between Player::_suspended being set to false and the the butler
requesting a seek, during which the butler may call pass().
</content>
</entry>
</feed>
