Commit graph

1840 commits

Author SHA1 Message Date
Alexander E. Patrakov
b094c92a01 Make pa_socket_server_new static
While at it, also remove SOCKET_SERVER_GENERIC, because it is always
being overwritten with a specific socket type.

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2015-02-12 20:33:45 +01:00
Tanu Kaskinen
73dee7c9f7 socket-server: pa_socket_server_new() can't fail, so don't check its return value
An assertion was already used in pa_socket_server_new_unix(), this
makes the TCP variants consistent with that.

Even if pa_socket_server_new() could fail, the error handling wasn't
good, because there was no "goto fail", meaning that the fd would have
been leaked.
2015-02-12 20:33:44 +01:00
David Henningsson
34862dbd43 protocol-native: Disable srbchannel by default
Recent testing has shown some srbchannel related bugs that
indicates that the srbchannel feature is not ready to be enabled
by default.

Therefore, temporary disable it for the 6.0 release and re-enable
it in git master once 6.0 is released.

Bugs:
https://bugs.freedesktop.org/show_bug.cgi?id=88452
https://bugs.freedesktop.org/show_bug.cgi?id=88167

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-01-21 15:06:53 +01:00
Ondrej Holecek
5effc83479 update FSF addresses to FSF web page
FSF addresses used in PA sources are no longer valid and rpmlint
generates numerous warnings during packaging because of this.
This patch changes all FSF addresses to FSF web page according to
the GPL how-to: https://www.gnu.org/licenses/gpl-howto.en.html

Done automatically by sed-ing through sources.
2015-01-14 22:20:40 +02:00
Wim Taymans
50186d7fcb svolume.orc: avoid parameter loading undefined behaviour
In some cases, depending on the instruction that performs the load, orc
ignores the size of the parameter when loading it for the first time.
Explicitly load the parameter into a temp to make sure it is loaded
correctly, like we do for the 2ch case.

See https://bugzilla.gnome.org/show_bug.cgi?id=742271
2015-01-12 13:56:29 +05:30
David Henningsson
112a39fa43 memblock: Fix more block ID collisions
Since the srb memblock and the audio data were coming from separate
pools, and the base index was per pool, they could actually still
collide.

This patch changes the base index to be global and atomically
incremented.

Reported-by: Arun Raghavan <arun@accosted.net>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2015-01-08 16:10:50 +01:00
Alexander E. Patrakov
6e4e8621a6 Fix URLs still pointing to the old wiki
Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
2014-12-22 12:59:23 +02:00
David Henningsson
9e65fd1373 memblock: Initialize mempool object to zero
This fixes a "use of uninitialised value" error in previous memblock commit.

Reported-by: Alexander Patrakov <patrakov@gmail.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-12-10 14:28:45 +01:00
David Henningsson
e175796fa5 srbchannel: Check return value of pa_memblock_new_pool
In case PA_MEMPOOL_DISABLE is set, pa_memblock_new_pool can return
NULL. It does not make sense to set up a srbchannel without a shared
memory pool, so just fail in this case.

Reported-by: Alexander Patrakov <patrakov@gmail.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-12-08 14:12:02 +01:00
David Henningsson
baf7b985fb memblock: Avoid block ID collisions when exporting memory blocks
Every new memexport object now gets an ever increasing base index,
that prevents block ID collisions between different memexport
objects on the same pstream.

In particular, this prevents block ID collision between the srb memblock
(which has its own memexport object) and audio data blocks.

Reported-by: Peter Meerwald <pmeerw@pmeerw.net>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-12-08 09:09:38 +01:00
Tanu Kaskinen
2b6632e851 module: Fix unsafe iteration
This fixes an issue when requesting module unload for
module-bluetooth-discover. When unloading the module, it also unloads
module-bluez4-discover and/or module-bluez5-discover, and that
invalidated the state variable that was used for iterating through the
modules idxset.

The pa_module.unload_requested flag could now otherwise be removed,
but it's still being (ab)used in the bluetooth modules.
2014-12-05 16:07:59 +02:00
David Henningsson
686baf80d9 core-util: Fix build on mingw32
mingw32 does not have "getuid", so ifdef it properly.

Reported-by: Michael DePaulo <mikedep333@gmail.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-12-04 15:39:03 +01:00
Felipe Sateler
13a3daa928 Fix #defines for Debian GNU/kFreeBSD
Because debian does not run with the freebsd libc, but rather uses the
GNU one, it chose to not define __FreeBSD__, but rather __FreeBSD_kernel__.
Use the alternative when the functionality tested is for kernel
features, and keep the __FreeBSD__ one when using freebsd libc
headers.

If this patch is applied, debian could drop all the current patches when
importing 6.0 :)
2014-12-01 12:11:07 +01:00
Peter Meerwald
68cc36140b core: Annotate variables only used within assert()s to be PA_UNUSED
supresses a warning when compiling with NDEBUG:

pulsecore/aupdate.c: In function 'pa_aupdate_read_end':
pulsecore/aupdate.c:82:14: warning: variable 'n' set but not used [-Wunused-but-set-variable]
     unsigned n;

pulsecore/sink-input.c: In function 'pa_sink_input_unlink':
pulsecore/sink-input.c:648:27: warning: variable 'p' set but not used [-Wunused-but-set-variable]
     pa_source_output *o, *p = NULL;

pulsecore/sink-input.c: In function 'find_filter_sink_input':
pulsecore/sink-input.c:1523:14: warning: unused variable 'i' [-Wunused-variable]
     unsigned i = 0;

pulsecore/sink-input.c: In function 'pa_sink_input_start_move':
pulsecore/sink-input.c:1569:27: warning: variable 'p' set but not used [-Wunused-but-set-variable]
     pa_source_output *o, *p = NULL;

  CC       pulsecore/libpulsecore_5.0_la-sink.lo
pulsecore/sink.c: In function 'pa_sink_unlink':
pulsecore/sink.c:673:24: warning: variable 'j' set but not used [-Wunused-but-set-variable]
     pa_sink_input *i, *j = NULL;

   pulsecore/source-output.c: In function 'find_filter_source_output':
pulsecore/source-output.c:1179:9: warning: unused variable 'i' [-Wunused-variable]
     int i = 0;

  CC       pulsecore/libpulsecore_5.0_la-source.lo
pulsecore/source.c: In function 'pa_source_unlink':
pulsecore/source.c:616:27: warning: variable 'j' set but not used [-Wunused-but-set-variable]
     pa_source_output *o, *j = NULL;

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-17 13:24:51 +01:00
Peter Meerwald
87d188b46c macro: Add macro PA_UNUSED
the macro PA_UNUSED may be used to suppress a warning when a variable
is not used, or assigned and never used; this typically happens
when the only use of the variable is within an assert() that can
be optimized away (i.e. with NDEBUG set)

has an effect with GCC only

v2: (thanks to Alexander Patrakov)
* fix patch subject/description

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-17 13:24:43 +01:00
Peter Meerwald
094de7f024 macro: Abort() when pa_assert_not_reached() even for NDEBUG
fixes many warnings when compiling with NDEBUG, such as
  CC       pulse/libpulse_la-channelmap.lo
pulse/channelmap.c: In function 'pa_channel_map_init_auto':
pulse/channelmap.c:397:1: warning: control reaches end of non-void function [-Wreturn-type]

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-17 13:24:38 +01:00
Andrey Semashev
807c98a37d resampler: Fix sample_format_more_precise() for the case of comparing against PA_SAMPLE_S32BE
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-12 23:17:08 +01:00
Peter Meerwald
fa092af59c rtpoll: Drop extra wait_op argument to pa_rtpoll_run()
is always true, not used

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:53:06 +01:00
Peter Meerwald
2638591497 rtpoll: Fix condition for DEBUG_TIMING output
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:53:02 +01:00
Peter Meerwald
b5b4a1078c mix: Length over all chunk has already been computed by the caller
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:39:24 +01:00
Peter Meerwald
3963fc5e5b mix: pa_mix() is always called with more than one steam
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:39:03 +01:00
Peter Meerwald
ea5cbec0b7 iochannel: Remove unnecessary zero-initialization
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:38:29 +01:00
Peter Meerwald
101092465d core: Replace assert()s with pa_assert()s
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:14:33 +01:00
Peter Meerwald
59334021d3 log: Cleanup
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:14:02 +01:00
Peter Meerwald
b9aafdd736 mix: Make use of pa_cvolume_is_norm/muted() macros
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-09 22:13:34 +01:00
Peter Meerwald
8ce2bfa4d0 pstream: Duplicate assignment, write.data is always NULL
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-06 10:20:05 +01:00
Peter Meerwald
7bb708d953 asyncmsgq: Drop weird assert
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-06 10:15:13 +01:00
Peter Meerwald
70973d58e6 resampler: Drop pointless remix variable
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-06 10:12:39 +01:00
Peter Meerwald
31d5acdc78 rtpoll: typo
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-11-04 21:57:48 +01:00
Colin Guthrie
467b4b9bee socket-server: Add support for systemd socket activation.
This adds support to module-native-protocol-unix to take over already
listening sockets passed in via socket activation (e.g. from systemd)

Most of the code is isolated to socket-server but some cleanup code also
had to be tweaked to ensure we do not overzealously close open fds.
2014-11-03 12:32:23 +00:00
Colin Guthrie
f7da58b73f build-sys: Clarify some systemd sub-component variable/define names.
We currently use the term SYSTEMD when referring to libsystemd-login
and JOURNAL when referring to libsystemd-journal.

I will be shortly adding support for libsystemd-daemon and in
preparation I figured it would be a good idea to clarify the names
used currently before adding another!
2014-11-03 12:32:23 +00:00
Tanu Kaskinen
9b87baf58a socket-server: Improve readability 2014-11-03 11:23:25 +02:00
Arun Raghavan
8718496d14 creds: Rename pa_ancil to pa_cmsg_ancil_data
Makes the purpose of the structure clearear.
2014-10-31 10:46:10 +05:30
Peter Meerwald
f390e6e974 Cleanup !! for bool
!!x makes no sense if x is bool (this is a leftover from the
convertion pa_bool_t -> bool, d806b197)

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-10-28 17:36:22 +01:00
David Henningsson
356e133357 pstream-util: Fix build on freebsd
The previous fix was not entirely complete.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-10-26 08:23:36 +01:00
David Henningsson
22827a5e1e protocol-native: Fail if trying to push unaligned memblock into queue
We will just ignore the memblock if this happens. We already have
a check for this in the client library, so this one is just for
security reasons.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-10-24 15:01:13 +02:00
David Henningsson
6434853b04 memblockq: Do not allow non-frame indices in the memblock queue
Since we don't allow lengths that are not frame aligned,
it does not make sense to allow indices that are not frame aligned
either.
Also, allowing such a thing to be added causes the daemon to crash
later instead (see https://bugs.freedesktop.org/show_bug.cgi?id=77595 ).

Also drop _se from assert (there is no side effect).

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-10-24 14:59:31 +02:00
Tanu Kaskinen
f04e31dc5e core-util: Add pa_unset_env()
Since we already have pa_set_env(), it's nice to also have a
corresponding function for unsetting environment variables.
2014-10-02 12:14:09 +03:00
David Henningsson
e521d38787 srbchannel: Defer reading when setting up read callback
Calling the callback while setting it up can make things
complicated for clients, as the callback can do arbitrarily
things.

In this case, a protocol error caused the srbchannel to be
owned by both the pstream and the native connection.

Now the read callback is deferred, making sure the callback
is called from a cleaner context where errors are handled
appropriately.

Reported-by: Tanu Kaskinen <tanu.kaskinen@linux.intel.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-09-18 12:07:37 +02:00
Peter Meerwald
f4ab8bd835 cpu: Add force_generic_code flag to cpu_info struct
The remapper and channel mixing code have (faster) specialized and (slower)
generic code certain code path. The flag force_generic_code can be set to
force the generic code path which is useful for testing. Code duplication
(such as in mix-special-test) can be avoided, cleanup patches follow.

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-09-10 16:34:11 +02:00
Peter Meerwald
61c888dc93 cpu: Don't check for both x86 and ARM code
Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-09-10 16:01:57 +02:00
Peter Meerwald
380591eb18 core: Add pa_cpu_init() / cpu.c
move code dealing with CPU specific code path initialization
from daemon/main.c to pulsecore/cpu.c

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-09-10 16:01:14 +02:00
Lukasz Marek
78ca8cfc96 Client API: Add pa_stream_write_ext_free() function.
New function allows to pass data pointer that is a member
of the outer structure that need to be freed too when data
is not needed anymore.

Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
2014-09-10 10:12:08 +02:00
David Henningsson
076601ee28 core-util: Fail if XDG_RUNTIME_DIR belongs to someone else
Usually, PA will use the PULSE_SERVER X11 property instead of using XDG_RUNTIME_DIR,
so this environment variable does not matter.

If this property is not available, or if one is using the pacmd cli protocol,
the client will go ahead and call pa_make_secure_dir on XDG_RUNTIME_DIR/pulse.
This will either fail (if you're another regular user), or succeed (if you're root).
Both scenarios are bad - failing will cause the connection to fail, and succeeding
is even worse, as it can cause *other* connections to fail (as the directory
ownership has changed).

Instead fail and complain loudly.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=83007
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-09-08 13:46:01 +02:00
Peter Meerwald
293a1739e2 endianmacros: Replace borked PA_FLOAT32_SWAP() with PA_READ_FLOAT32RE() / PA_WRITE_FLOAT32RE()
building PA with -O0 leads to test failure in mix-test on i386

issue reported by Felipe, see
http://lists.freedesktop.org/archives/pulseaudio-discuss/2014-August/021406.html

the problem is the value 0xbeffbd7f: when byte-swapped it becomes 0x7fbdffbe and according
to IEEE-754 represents a signalling NaN (starting with s111 1111 10, see http://en.wikipedia.org/wiki/NaN)

when this value is assigned to a floating point register, it becomes 0x7ffdffbe, representing
a quiet NaN (starting with s111 1111 11) -- a signalling NaN is turned into a quiet NaN!

so PA_FLOAT32_SWAP(PA_FLOAT32_SWAP(x)) != x for certain values, uhuh!

the following test code can be used; due to volatile, it will always demonstrate the issue;
without volatile, it depends on the optimization level (i386, 32-bit, gcc 4.9):

// snip

static inline float PA_FLOAT32_SWAP(float x) {
    union {
        float f;
        uint32_t u;
    } t;

    t.f = x;
    t.u = bswap_32(t.u);
    return t.f;
}

int main() {
  unsigned x = 0xbeffbd7f;
  volatile float f = PA_FLOAT32_SWAP(*(float *)&x);
  printf("%08x %08x %08x %f\n", 0xbeffbd7f, *(unsigned *)&f, bswap_32(*(unsigned *)&f), f);
}
// snip

the problem goes away with optimization when no temporary floating point registers are used

the proposed solution is to avoid passing swapped floating point data in a
float; this is done with new functions PA_READ_FLOAT32RE() and PA_WRITE_FLOAT32RE()
which use uint32_t to dereference a pointer and byte-swap the data, hence no temporary
float variable is used

also delete PA_FLOAT32_TO_LE()/_BE(), not used

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Reported-by: Felipe Sateler <fsateler@debian.org>
2014-09-04 09:58:20 +02:00
Peter Meerwald
5d7b5e509c svolume: Make volume pointer parameter const for pa_volume_float32re_c()
const obviously missing

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
2014-09-03 12:51:22 +02:00
David Henningsson
58cffdcfc8 Replace "authorization" with "authentication"
Since we don't have "limited" clients, a client that authenticates
correctly is automatically authorized. However, it's the authentication
that can go wrong, rather than the authorization.

Buglink: https://bugs.freedesktop.org/show_bug.cgi?id=78566
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-09-02 12:50:48 +02:00
Arun Raghavan
a7667b990e srbchannel: Fix documentation error
I seem to have misread the code previously.
2014-08-31 15:10:22 +05:30
David Henningsson
f611b9b7aa resampler: Remove duplicate forward declaration of pa_resampler
This duplicated line also caused a compiler warning on some compilers.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-08-29 15:34:34 +02:00
David Henningsson
5dba418160 sink/source: Fix restore of volume on devices without hw volume
Module-device-restore sets reference_volume, but soft_volume remains at
zero dB, so if a device only has soft_volume (i e no hw volume controls),
its volume was not restored correctly.

Reported-by: Richardo Salveti de Araujo <ricardo.salveti@canonical.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
2014-08-29 15:34:18 +02:00