Commit graph

61 commits

Author SHA1 Message Date
Sebastian Dröge
241d0f16f6 poll: #define EWOULDBLOCK to EAGAIN if it's not defined on Windows 2016-06-29 23:24:02 +02:00
Sebastian Dröge
cda3f1213b poll: Clarify when FALSE is returned from read/write_control()
And also mention what the expected values of errno are going to be.

write_control() will only ever return FALSE if there was a critical error. It
will never return because of EINTR, EAGAIN or EWOULDBLOCK.

read_control() will return FALSE if there was no byte to read, in which case
errno would be EWOULDBLOCK.
In all other cases there was a critical error.

https://bugzilla.gnome.org/show_bug.cgi?id=750397
2016-06-29 21:21:04 +02:00
Sebastian Dröge
254955df62 poll: set_controllable(), restart() and set_flushing() are only valid for non-timer GstPolls
On timer GstPolls it will cause the control socket state to become
inconsistent as now one less read_control() than write_control() be would
needed.

Similarly, read_control() and write_control() are only valid on timer
GstPolls.

https://bugzilla.gnome.org/show_bug.cgi?id=750397
2016-06-29 21:21:04 +02:00
Matthew Gruenke
cd06aea103 poll: Fix various race conditions with read_control() and write_control()
This addresses slightly different race conditions on Linux and Windows, and
fixes gst_poll_read_control() when control_pending == 0.

On Linux, the socketpair() used for control should not be made O_NONBLOCK.
If there's any propagation delay between set->control_write_fd.fd and
set->control_read_fd.fd, even the mutex now held will not be sufficient to
prevent a race condition.  There's no benefit to using O_NONBLOCK, here.
Only liabilities.

For Windows, it's necessary to fix the race condition between testing
set->control_pending and performing WAKE_EVENT()/RELEASE_EVENT().  This is
accomplished by acquiring and holding set->lock, for both of these operations.
We could optimize the Linux version by making this Windows-specific.

For consistency with the Linux implementation, Windows' RELEASE_EVENT()
has also been made to block, although it should never happen.

Also, changed release_wakeup() to return TRUE and decrement control_pending
only when > 0.  Furthermore, RELEASE_EVENT() is called only when
control_pending == 1.

Finally, changed control_pending to use normal, non-atomic arithmetic
operations, since it's now protected by set->lock.

Note: even though the underlying signaling mechanisms are blocking,
release_wakeup() is effectively non-blocking, as it will only attempt to read
from control_read_fd.fd after a byte has been written to control_write_fd.fd
or WaitForSingleObject() after it's been signaled.

https://bugzilla.gnome.org/show_bug.cgi?id=750397
2016-06-29 21:21:04 +02:00
Руслан Ижбулатов
b87c55f6ed poll: Prevent false-negative from WAKE_EVENT() on W32
SetEvent() seems to not call SetLastError(0) internally, so checking last
error after calling SetEvent() may return the error from an earlier W32 API
call. Fix this by calling SetlastError(0) explicitly.

Currently WAKE_EVENT() code is cramped into a macro and doesn't look to be
entirely correct. Particularly, it does not check the return value of
SetEvent(), only the thread-local W32 error value. It is likely that SetEvent()
actually just returns non-zero value, but the code mistakenly thinks that the
call has failed, because GetLastError() seems to indicate so.

https://bugzilla.gnome.org/show_bug.cgi?id=733805
2014-07-28 09:13:44 +02:00
Evan Nemerson
2759882379 introspection: add missing (nullable) annotations to return values
Support for (nullable) was added to G-I at the same time as nullable
return values.  Previous versions of G-I will not mark return values as
nullable, even when an (allow-none) annotation is present, so it is
not necessary to add (allow-none) annotations for compatibility with
older versions of G-I.

https://bugzilla.gnome.org/show_bug.cgi?id=730957
2014-06-26 18:56:38 +02:00
Wim Taymans
fb44b4d2ec poll: improve debug
Add object pointer in debug lines.
2014-01-30 12:31:48 +01:00
Sebastian Rasmussen
53ae1b2c9c docs: Fix typos in function/object descriptions
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=720029
2013-12-07 17:11:12 +00:00
Wim Taymans
388f0ec069 poll: improve debug
So that we can see the return values of functions in the log.
2013-11-18 21:46:10 +01:00
Tim-Philipp Müller
666c8c11c6 Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2012-11-03 20:44:48 +00:00
Sebastian Dröge
3690f9a830 poll: Fix compiler warning about constness
passing argument 1 of 'g_mutex_lock' discards 'const' qualifier from pointer target type
passing argument 1 of 'g_mutex_unlock' discards 'const' qualifier from pointer target type
2012-10-18 15:31:49 +02:00
Sebastian Rasmussen
d24a5ecb93 gstpoll: Improve warning message when re-adding fd to fdset
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680181
2012-07-23 12:11:16 +02:00
Edward Hervey
d3ffa82639 Remove 0.10-related documentation and "Since" markers 2012-07-10 12:03:27 +02:00
Raimo Järvi
63234a9dab gst: Fix compiler warnings on mingw-w64
https://bugzilla.gnome.org/show_bug.cgi?id=675525
2012-05-09 09:35:35 +02:00
David Schleef
fb0b63d8fd poll: fix spelling of writable 2012-02-23 08:48:40 -08:00
Tim-Philipp Müller
13d91d1f6c Use recent GLib API unconditionally now that we depend on the latest GLib 2012-01-22 01:25:22 +00:00
Wim Taymans
252327f87a Update for new gthread API 2012-01-19 09:27:04 +01:00
Sebastian Dröge
148bf27ce3 Merge branch 'master' into 0.11 2012-01-10 13:00:07 +01:00
Idar Tollefsen
f0e121c197 poll: include correct poll.h based on autoconf test
https://bugzilla.gnome.org/show_bug.cgi?id=667286
2012-01-04 23:47:46 +00:00
Johan Dahlin
2f069b106e introspection: Skip gst_poll apis
https://bugzilla.gnome.org/show_bug.cgi?id=657640
2011-10-19 10:24:17 +02:00
Sebastian Dröge
43538e2e75 Merge branch 'master' into 0.11
Conflicts:
	docs/design/draft-buffer2.txt
	docs/design/part-TODO.txt
	docs/design/part-block.txt
	docs/design/part-bufferlist.txt
	docs/design/part-caps.txt
	docs/design/part-element-transform.txt
	docs/design/part-events.txt
	docs/design/part-negotiation.txt
	gst/gstcaps.c
	gst/gstevent.h
	gst/gstghostpad.c
	gst/gstinterface.c
	gst/gstpad.c
	gst/gstpad.h
	gst/gstutils.c
	libs/gst/base/gstbasesink.c
	libs/gst/base/gstbasesrc.c
	libs/gst/base/gstbasetransform.c
	libs/gst/base/gsttypefindhelper.c
	plugins/elements/gstcapsfilter.c
	plugins/elements/gsttee.c
	tests/check/generic/sinks.c
	tools/gst-launch.1.in
2011-09-08 14:28:23 +02:00
Piotr Fusik
14f5518f3d docs, gst: typo fixes
https://bugzilla.gnome.org/show_bug.cgi?id=658449
2011-09-07 18:03:17 +01:00
Wim Taymans
d54f3f1385 poll: improve debugging 2011-07-25 15:21:21 +02:00
David Schleef
f3eac7de22 Work around changes in g_atomic API
See #651514 for details.  It's apparently impossible to write code
that avoids both type punning warnings with old g_atomic headers and
assertions in the new.  Thus, macros and a version check.
2011-06-04 00:36:26 -07:00
Руслан Ижбулатов
54a9d8038d poll: Fix WAKE_EVENT() to behave posixly on Windows 2011-05-25 12:04:14 +02:00
Andoni Morales Alastruey
7c6d9c2725 gstpoll: retry reading the control socket to release properly all wakeups
if set->control_pending is set to 0 but we didn't not succed reading
the control socket, future calls to gst_poll_wait() will be awaiken
by the control socket which will not be released properly because
set->control_pending is already 0, causing an infinite loop.
2011-04-04 11:05:45 +02:00
Thomas Kristensen
d0d27e83fe poll: don't call WSAWaitForMultipleEvents with no events
Fixes error caught by Microsoft Application Verifier.
2011-04-04 09:23:57 +02:00
Jason D. Clinton
a789096c04 build: fix build with -Werror with GCC 4.6.0
This touches three areas of code, removes unused variables and discards
return values from two functions with (void).

https://bugzilla.gnome.org/show_bug.cgi?id=645267
2011-03-21 09:29:19 +01:00
Mark Nauwelaerts
50d566d9ad poll: trigger rebuild setup in _new
Failing to do so in the Windows case (implicitly triggered otherwise)
would have a subsequent _wait return immediately leading to high CPU
usage timeout loops.

Fixes #640675.
2011-02-03 15:52:18 +01:00
Raimo Järvi
0645c498f0 gstpoll: fix compiler warning with MingW
gstpoll.c: In function 'gst_poll_get_read_gpollfd':
gstpoll.c:692:10: warning: assignment makes integer from pointer without a cast

https://bugzilla.gnome.org/show_bug.cgi?id=638900
2011-01-11 12:47:49 +00:00
Edward Hervey
4f94b94bff gstpoll: Fix for (p)select backend
We need to reset the revents field of each pollfd when reading the results
from select else we'll end up with stray info from previous calls to
select.
2011-01-03 20:37:59 +01:00
Tim-Philipp Müller
3256c708be docs: gst: more gobject introspection annotations
Many of these are superfluous, added for clarity.
2010-12-07 18:37:04 +00:00
Wim Taymans
8bf6b0c3fe poll: return wakeup event in GPollFD 2010-12-06 11:20:35 +01:00
Wim Taymans
77830123cf poll: small cleanups 2010-12-03 15:50:38 +01:00
Wim Taymans
9bf56084cf poll: make sure we remove the readfd messages 2010-12-03 15:50:38 +01:00
Wim Taymans
35d10af06d poll: add method to get a GPollFD 2010-12-03 15:50:38 +01:00
Wim Taymans
22fa4470e2 poll: Refactor and make more lockfree
Refactor the wakeup of the poll thread.
Always make a control socket to make things easier.
Make more methods lockfree.
2010-12-03 15:50:38 +01:00
Wim Taymans
e266d4d397 poll: move lock to where it makes more sense 2010-12-03 15:50:38 +01:00
Wim Taymans
73ee14302f poll: make timer polls lockfree
Make sure we don't take a mutex in the normal code path of the timer
poll.
2010-12-03 15:50:38 +01:00
Tim-Philipp Müller
4cbf794b0e gstpoll: don't pass non-objects as first argument to GST_DEBUG_OBJECT()
This may cause crashes when logging is enabled, especially on windows.
It's not safe to pass random pointers to g_type_check_instance_is_a().

Fixes #611719.
2010-03-04 18:40:50 +00:00
Edward Hervey
edce400c79 gstpoll: Only take into account active fds
This is needed so that select properly errors out on macosx (sigh)
2009-10-12 12:01:59 +02:00
Edward Hervey
dc3fb58a90 gstpoll: Add some debugging statements 2009-10-12 10:07:03 +02:00
Edward Hervey
3254f19c6f gstpoll: Use the error fdset when using select/pselect.
This is needed to properly detect fds that are closed or that got
an error
2009-10-12 10:01:01 +02:00
Edward Hervey
95413683fa gstpoll: Don't use poll on systems with broken poll 2009-10-12 09:53:58 +02:00
Edward Hervey
0fc16a8e74 gst: Add debugging category GST_POLL for gstpoll 2009-10-12 09:50:00 +02:00
Peter Kjellerstedt
7be99f052b gstpoll: Corrected a documentation typo. 2009-03-26 19:33:41 +01:00
Jan Schmidt
31669a4819 gstpoll: Fix up documentation strings.
Note the changed behaviour of gst_poll_wait for timer GstPoll's, and
fix a couple of spelling errors.
2009-03-26 15:06:16 +00:00
LRN
e13168bd4b GstPoll: set the return value on windows
Make sure that the return value of the functions _read/_write_control()
return the actual result instead of always FALSE on windows.
Fixes #574211.
2009-03-05 11:02:59 +01:00
Wim Taymans
5cfb02af4a GstPoll: add methods to use gstpoll for timeouts
Add a special timer mode in GstPoll that makes it only use the control socket
with a timeout to schedule timeouts. Also add a pair of methods to wakeup the
timeout thread.
API: GstPoll::gst_poll_new_timer()
API: GstPoll::gst_poll_write_control()
API: GstPoll::gst_poll_read_control()
2009-02-03 17:49:02 +01:00
Wim Taymans
0f55cf13b4 Avoid unneeded reads from the control socket
Add a new variable that keeps track of the status of the control socket. This
allows us to avoid doing a read() on the control socket when we did not write
anything to it.
Fixes #568438.
2009-01-26 12:52:12 +01:00