Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz 1f7e5bde38 kernel: Fix NULL dereference in ThreadTimeUserTimer::Schedule().
The SpinLocker was always initialized to fThread->time_lock even though
fThread may be NULL. This looks like a simple oversight as the rest of
the method handles fThread being NULL and the team variants of these
timers have very similar logic and do the NULL check as well.

This fixes the last remaining KDL in the posixtestsuite.
2016-12-12 11:55:06 +01:00
Michael Lotz 40044981eb FreeBSD compat: Align allocations according to FreeBSD man page.
According to the FreeBSD kernel malloc man page the allocator is
expected to return power of two aligned addresses for allocations up to
one page size. While it also states that this shouldn't be relied upon,
at least our (directly copied) bus_dmamem_alloc expects it and drivers
may depend on it as well. Looking through the FreeBSD commit logs, this
expectation seems to be rooted quite deeply.

This fixes watchdog timeouts in the ipro1000 driver under KVM and may
help with #11953. It might also be related to #9099 and #9601 as those
seem memory allocation related as well.
2016-12-11 01:09:17 +01:00
Michael Lotz 3108c9bed0 ioapic: Fix 64 bit build with tracing enabled, some cleanup.
* Use print format macros to fix the 64 bit build.
* Correct a typo in the shift of the trigger mode definition. As the
  value is 0 either way, this does not make a functional difference.
* Use macros instead of values in comparisons.
2016-03-12 13:34:01 +01:00
Michael Lotz 91ea4fb48a usb_ecm: Use the current configuration instead of a fixed one.
This allows usb_ecm to work in case it is part of a device using
different configurations for different types of interfaces and ECM is
not the first configuration.
2016-03-12 13:15:49 +01:00
Michael Lotz b62bb24fe4 USB: Force spec mandated control pipe max packet sizes.
While the USB descriptors are specifically built in such a way that it's
always possible to correctly query the max packet size, some devices
unfortunatley use bogus values in their descriptors and rely on the
stack to use the mandated values.

This fixes USB devices in VirtualBox when EHCI emulation is used. This
really is a bug in their descriptor emulation though.
2016-03-12 13:13:04 +01:00
Michael Lotz 3da7be22fb EHCI: Current qtd field in qh overlay has no terminate bit.
Don't initialize the current qtd field with the terminate bit as it does
not exist in this field. While the lower 5 bits are documented as being
ignored anyway, this is more correct. Should cause no functional change.
2016-03-12 13:12:35 +01:00
Michael Lotz ad72f4caed EHCI: Fix alignment check, the mask wasn't wide enough.
As this is only an assert that shouldn't ever be triggered, this doesn't
change anything in normal operation.
2016-03-12 13:12:11 +01:00
Michael Lotz 3648dc8709 EHCI: Style cleanup only, no functional change.
Change < B_OK to != B_OK for status_t results and to < 0 for ids.
2016-03-12 13:11:54 +01:00
Michael Lotz 28d3c8ca50 runtime_loader: Resync heap impl with the one of the bootloader.
The heap implementation of the runtime_loader was switched to the one
of the bootloader in 6f0994d but was since updated independently.

To keep the diff between the two implementations as small as possible,
the bootloader implementation was first copied to the runtime_loader
and then some features not relevant in the runtime_loader (like the
special large allocation handling) have been removed and the
runtime_loader specific features (grow_heap, add_area) have been
reintegrated. But basically this applies 96689a5..HEAD of
src/system/boot/loader/heap.cpp to the runtime_loader heap.

This brings in the switch from a linked list to a splay tree based
free chunk management. Since the allocation counts in the runtime_loader
are rather small, this does not perceptibly affect performance in either
direction though.
2015-12-27 13:54:48 +01:00
Michael Lotz 8bbfae7b05 runtime_loader: Fix endless rld heap grow loop in edge case.
The needed storage space for tracking the allocation size was not
accounted for when growing the heap. Since the growth size is always
rounded up to a multiple of 32KiB, this did almost never matter as the
new allocation wouldn't need the full size. If the allocation did
happen to need the full size however, the newly added area would always
be too small. As the allocation attempt was simply restarted after each
successful growth, this lead to an endless loop creating small new
areas, which would then quickly starve the system for memory.
2015-12-27 13:54:47 +01:00
Michael Lotz 2fc325944b Add sdl_{gfx|image|mixer|net|sound|ttf}, dependencies for x86. 2015-10-19 23:11:09 +00:00
Michael Lotz b64e119ace Add boost packages for x86. 2015-10-19 21:29:13 +00:00
Michael Lotz 83dc74af93 BPicture: Fix archive constructor on 64 bit.
The int32 was cast to a ssize_t which has a different size on 64 bit,
therefore clobbering the stack.

Also remove the use of basic type references in arguments, which
probably was the reason for doing the above in the first place.
2015-09-05 18:13:34 +02:00
Michael Lotz d64c7086d5 Various whitespace cleanup only. 2015-09-05 16:09:33 +02:00
Michael Lotz 8b9ec55606 BPicture: Fix archive constructor.
The cleanup commit df48d3f9a8 broke
constructing a BPicture from an archive due to an incomplete rename.
The passed in BMessage was used as the data buffer instead of the
extracted data field.

Fixes the application side crash of #12340. Seeing how long this was
broken without anyone noticing, the feature doesn't seem to be very
popular.
2015-09-05 16:09:32 +02:00
Michael Lotz 4176076be1 app_server: Port ServerPicture to the new PicturePlayer API.
This allows for bounds checks on strings and bitmap data to avoid
crashing due to corrupted user data. It also avoids copying the data
where possible.
2015-09-05 16:09:32 +02:00
Michael Lotz eec73693e0 PicturePlayer: Rework to be more safe against corrupted data.
This introduces a more sane API (currently private) that allows for
safer and possibly more efficient implementations:

* It uses a struct of named and typed function pointers instead of just
  a void pointer array. This adds type safety to the callbacks so the
  compiler can figure out if things match up before subtle bugs get
  introduced.
* It provides bounds for all strings/buffers passed to the callbacks.
* It uses const references instead of implicitly copying arguments.
* It folds stroke_x/fill_x pairs into draw_x functions with a fill
  argument to reduce the amount of functions needed.
* It uses unsigned values where negative values make no sense.

The old API has been implemented on top of the new one using adapter
functions. It makes copies of all data passed to the callbacks which
effectively keeps the picture data from being modified. This matches
with the R5 behaviour.

This also reimplements the buffer parsing to be safe against corrupted
data by validating that the types actually fit in the provided sizes
and buffers (using a templated reader).

Since this class is used from the app_server with user provided data,
making it more safe is important even though it comes with a slight
overhead (replicating R5 behaviour, i.e. crashing the app_server when
corrupted data is fed, doesn't seem very appropriate here).
2015-09-05 16:09:31 +02:00
Michael Lotz a33d19b0a4 Update haikuwebkit packages to 1.4.12 on x86[_(gcc2|64)]. 2015-08-30 23:10:51 +02:00
Michael Lotz cccf804d96 ahci: Replace use of bit field with shifts and masks.
It's a 32 bit register which needs properly aligned 32 bit writes. Using
a bit field does not guarantee that, so replace it with shifts and
masks. Should fix #12338.
2015-08-30 11:17:47 +02:00
Michael Lotz d316ccc7e3 ahci: Whitespace and line length cleanup only. 2015-08-30 10:50:32 +02:00
Michael Lotz 0a6d595951 Add system_time to the Jamfile, missed in hrev49598. 2015-08-29 19:33:27 +02:00
Michael Lotz 5ce7069d15 Add script that prints the uptime after waiting for all servers.
It waits for the message port of each application to become available
using waitfor and then waits for the application to actually reply
using hey. This establishes the criterion of the boot process being
complete as "all servers (and Tracker & Deskbar) are started and
respond to messages".
2015-08-29 19:15:47 +02:00
Michael Lotz b11eb89c2d Add system_time bin command which just prints system_time().
This can be used by scripts to do verious performance measurements.
Specifically it can be used to measure the boot time since it represents
the uptime.
2015-08-29 19:15:47 +02:00
Michael Lotz c0c883cf8e BMessage: Fix precedence of KMessage vs. size check.
A KMessage request always needs to be honoured, regardless of the data
size.

KMessage does not currently protect against messages that are too large,
but this needs to be solved in KMessage when it becomes a problem.
2015-08-29 11:25:46 +02:00
Michael Lotz bc5a7a3749 keystore_server: Fix crash on request window close.
The outside waiting mechanism is responsible for quitting the dialog so
prevent it from quitting itself.
2015-08-29 10:53:28 +02:00
Michael Lotz 515e648d7b keystore_server: Use B_CLOSE_ON_ESCAPE in request dialogs.
Instead of doing it manually.
2015-08-29 10:53:27 +02:00
Michael Lotz b92e2c086f keystore_server: Resize request windows to preferred size.
Long application signatures and paths could previously take up too much
space, causing the buttons to be cut off or become completely invisible.

Actually fixes #11367.
2015-08-29 10:53:27 +02:00
Michael Lotz 5cf6c0fd3b launch_daemon: Create/inject ports on launch instead of upfront.
The application is now launched suspended and the ports are created
and transferred to the launched team before its main thread is
resumed.

The ports are therefore owned by the launched team instead of the
launch_daemon. This is important when sending messages by area, as
the port owner is used to determine where the data area needs to be
transferred to. This commit therefore fixes #12285.

Note that it is still possible to get at the ports with find_port()
while they are still owned by the launch_daemon. This should not be a
problem however, as these ports are not supposed to be found this way
but only through BLaunchRoster::GetData(), which is synchronized with
the above process.

Creating the ports in the launch_daemon still has the benefit of
returning valid communication ports earlier, i.e. without having to
wait for the launched application to actually become ready.
2015-08-28 22:52:50 +02:00
Michael Lotz 5b9f6b5485 BRoster: Add launchSuspended option to _LaunchApp().
It allows to launch the app, but keep its main thread suspended instead
of automatically resuming it.

Also add appThread argument which allows to retrieve the main thread of
the launched team.
2015-08-28 22:52:50 +02:00
Michael Lotz 14156a33ac launch_daemon: Delegate launch data replies to Job.
Previously the LaunchDaemon would send out its own team id when a given
job was not yet launched, leading to invalid BMessengers once the port
owner changed to the actually launched team.

The launch of the target team and the launch data replies were also not
synchronized, which could lead to the launched team getting a reply
pointing to the launch_daemon when requesting data for itself. This is
the case for the BRoster init of the registrar. The fix in hrev49561
therefore didn't always work, because the registrar would sometimes get
the launch_daemon team id instead of the id of itself. It would later
try talking to the launch_daemon, which obviously never replied, leading
to #12237.

The LaunchDaemon now delegates the launch data reply to the Job instead.
The Job either replies directly, in case it has already been launched,
or queues the reply for when the launch completes. This causes launch
data requesters to block until the launch attempt is completed, but
won't block the LaunchDaemon message loop.

This commit introduces the seperate fLaunchStatus to properly handle the
ambiguity of fTeam being < 0, which is the case for both, when no launch
was attempted and when the launch failed. This new field now determines
what IsLaunched() returns and how launch data replies are handled.

The new launch status is additionally protected by the launch status
lock, which will later probably be made broader in scope to protect
against race conditions once service monitoring is implemented.
2015-08-26 22:24:00 +02:00
Michael Lotz ee5575d9b3 BRoster: Apply no-registrar mode in a few more cases.
Avoids some more attempts at communicating with the registrar if the
no-registrar flag has been set.
2015-08-26 22:23:59 +02:00
Michael Lotz f11d686c96 launch_daemon: Remove extra quoting around env variables.
The extra quotes aren't needed and cause problems when not parsed
through a shell. For example LD_PRELOAD which is handled by the
runtime_loader directly failed to work as there was no way to remove
the extra single quotes.

Note that quotes and single quotes can still be added to the variables
through respective quoting in the driver settings syntax.
2015-08-23 15:17:39 +02:00
Michael Lotz 8b9bb054f4 libroot_debug: Replace two more uses of printf in guarded heap.
Use the internal print_stdout() instead as done when printing the
stack traces.
2015-08-23 13:19:12 +02:00
Michael Lotz 5dbea46970 libroot_debug: Track freeing thread in guarded heap separatley.
Previously the thread member was overwritten with the freeing thread
when a page was freed, leading to confusion when hitting unallocated
pages due to the debugger message still stating "allocated by thread".

Track the freeing thread separately as it might be interesting to know
both, which thread initially allocated and which thread eventually freed
an allocation.
2015-08-23 13:10:12 +02:00
Michael Lotz 8074f0b94b launch_daemon: Replace the remaining putenv() calls by setenv(). 2015-08-23 12:36:12 +02:00
Michael Lotz 71cc01b2b1 registrar: Use the safer strlcpy instead of strcpy. 2015-08-23 12:35:25 +02:00
Michael Lotz 462bfeede0 registrar: Fix race condition on MimeUpdateThread termination.
When the MimeUpdateThread is done, it marks itself as finished and
notifies the thread manager to clean up finished threads. Since multiple
such threads might finish at the same time and trigger the cleanup
notification, other threads that already marked themselves finished but
haven't actually exited yet might already be deleted and removed. This
would then lead to a use-after-free when they subsequently tried to send
their own cleanup message.

To solve the race condition, the thread manager will now wait for the
thread to actually exit before cleaning it up.

The introduction of the launch_daemon has made this race condition more
likely due to more applications starting in parallel, each triggering a
CreateAppMetaMimeThread which is a subclass of MimeUpdateThread. This
commit might therefore fix #12237.
2015-08-23 12:30:35 +02:00
Michael Lotz dfb3208fa3 registrar: Whitespace and style cleanup only.
Generally this code still looks horrible (both from a style and from a
complexity point of view) and should eventually be reworked.
2015-08-23 12:30:35 +02:00
Michael Lotz f6b2da0a71 launch_daemon: Add env vars from sourced files to correct list.
The environment variables were always added to the static environment
list instead of the one supplied as argument. This worked for targets,
as there the scripts are evaluated before the static environment is
used. For services and jobs this isn't the case, causing sourced
environment variables to be missing.
2015-08-22 17:23:35 +02:00
Michael Lotz 3667f6efdb BApplication: Avoid create_app_meta_mime() for the registrar.
BApplication::_InitData() already avoided the use of BRoster from the
registrar (and launch_daemon) where it isn't available. Since
create_app_meta_mime() indirectly just sends a message to the registrar
using BRoster, it too cannot work when the registrar isn't available.
2015-08-21 23:23:26 +02:00
Michael Lotz 811f0164a0 BRoster: Make sure we aren't the registrar when initializing.
This fixes a regression introduced in 9bfc833, where the old way of
getting the roster port was replaced with its launch_daemon counterpart.

The previous method of finding the roster did always fail when running
from the registrar, as at the time of initialization (initialize_before
of libbe) the registrar looper doesn't exist yet. This commit restores
the previous behaviour by checking if the returned registrar team is the
current team and avoiding initialization in that case.

The regression caused a 5 second boot delay when later BApplication
initialization of the registrar tried to communicate with itself with a
reply timeout of that length.

Fixes #12258 at least partially and might affect #12237.
2015-08-21 23:03:37 +02:00
Michael Lotz 5ca445dfc6 FS module docs: Add documentation for entry_cache_add_missing().
This was missed when introducing the feature in hrev49558. Thanks Jérôme
for the pointer!

Also add a note explaining that update operations on cached entries and
the removal of uncached entries are safe.
2015-08-21 21:08:15 +02:00
Michael Lotz c4a9344a11 libroot_debug: Support alignments > B_PAGE_SIZE in guarded heap.
These are always allocated using an area. The allocation size is
increased as to guarantee the availability of a suitable address. The
pages between the allocation info and the actual, aligned start address
and the pages past the allocation end are then protected.

This commit also fixes corruption of the allocation info for large
allocations that used areas. The alignment wasn't taken into account
when calculating the amount of space needed. The alignment could then
lead to rounding down the allocation start such that it would overlap
with the allocation info.
2015-08-20 21:59:41 +02:00
Michael Lotz 5d4501aa01 Assorted whitespace cleanup and typo fixes. 2015-08-20 21:54:41 +02:00
Michael Lotz 44b69ccbdb bfs: Use negative caching on directory lookup failures. 2015-08-20 21:25:56 +02:00
Michael Lotz efb0a3a853 EntryCache: Add entry_cache_add_missing() for negative caching.
It provides a way for filesystems to cache a lookup failure and
therefore prevents repeated lookups of missing entries. This is a
common scenario for example in command lookup and compiling, where
each directory in PATH or each include directory is searched for the
given entry.
2015-08-20 21:25:56 +02:00
Michael Lotz 883b3e1d5c DebugAnalyzer: Fix 64 bit build. 2015-08-20 21:25:55 +02:00
Michael Lotz dfcf52c9f1 leak_analyser: Update excludes with more generic regex for ICU.
Also add initialize_before of libroot to the default excludes.
2015-08-13 22:34:51 +02:00
Michael Lotz 1748116d1c libroot_debug.so: Fix missing alignment in guarded realloc. 2015-08-13 22:33:55 +02:00
Michael Lotz 8fa441bf5c libroot_debug: Revert to a legacy default alignment of 8.
This reverts the legacy default alignment (in absence of max_align_t)
to 8, as it was before.
2015-08-13 22:12:19 +02:00
Michael Lotz f474606ee9 libroot_debug: Merge guarded heap into libroot_debug.
The individual debug heap implementations are now exposed via a
structure of function pointers and a common frontend dispatches the
malloc and malloc_debug APIs through them.

The MALLOC_DEBUG environment variable can be used to select the guarded
heap by adding 'g', otherwise the debug heap is used as the default.
Consequently the separate libroot_guarded is not needed anymore and has
been removed.

To allow the use of environment variables this early, init_env_post_heap
has been added and the heap dependent atfork() moved there. This allowed
to fold the code of init_heap_post_env into init_heap so the former has
been removed.
2015-08-13 22:12:18 +02:00
Michael Lotz 7cef8ca2fe Tracker: Fix regression introduced in hrev49011.
If the view fails to lock because it is actually gone, we obviously
can't use it to return the container, so delete it directly in that
case.

Fixes #12072 and probably #11982 which would then be a duplicate.
2015-08-10 21:48:26 +02:00
Michael Lotz 8982293017 tcp: Whitespace cleanup, move a define to header and fix a typo. 2015-08-02 23:21:12 +02:00
Michael Lotz bed94ebc49 tcp: Change timestamp factor from 1024 to 1000.
It is the conversion factor between the milliseconds tcp time and the
microseconds system time, so 1024 does not make much sense.
2015-08-02 23:21:12 +02:00
Michael Lotz 94fb06bfce tcp: Fix early cancellation of timers on socket free.
TCPEndpoint::Free() uses _EnterTimeWait() to start the time-wait timer
for later cleanup. The latter did call _CancelConnectionTimers()
unconditionally however, also cancelling a retransmit timer that was
possibly still needed for the retransmission of the FIN packet. If the
FIN packet got lost, the connection would be left open on the other end.
2015-08-02 23:21:12 +02:00
Michael Lotz bc49140bab tcp: Add APICall trace entry and move TRACEs into locked parts.
The APICall trace entry just records the function name but this is
enough to deduce where some of the state changes come from.

Also move the TRACE macros past the MutexLockers to ensure that their
output happens at the time when the methods actually run.
2015-08-02 23:21:11 +02:00
Michael Lotz 05220224ff tcp: Split Timer trace entry into Timer{Set|Triggered}.
Trace whenever a timer is (re-)set as well as when it triggers. A value
of -1 denotes the cancellation of the timer.
2015-08-02 23:21:11 +02:00
Michael Lotz 01b0f935ec tcp: Move persist timeout value to a define in the header. 2015-08-02 23:21:11 +02:00
Michael Lotz 5f7749078e tcp: Fix retransmit logic to avoid lots of spurious retransmits.
The retransmit timer was only stopped when all in flight data was
acknowledged and never updated on individual acknowledgements. This
caused a lot of erroneous retransmits whenever the buffer was filled
fast enough so that the acknowledgements never caught up, i.e. whenever
uploading or streaming data.

Move setting of the initial retransmit timer inside the send loop so it
is closer to the actual time the segment is sent out and simplify the
logic a bit.

Limit the minimal retransmit timeout to 200 msecs to avoid spurious
retransmit in the face of delayed acknowledgements. This is lower than
the 1 second minimum the RFCs suggest. Other stacks use various other
sub-second timeouts, the 200 msecs follows what Linux does.

Also add the exponential back off of the retransmit timeout when
retransmits are triggered. This is bounded by a 60 seconds maximum
according to RFC6298.
2015-08-02 23:21:11 +02:00
Michael Lotz da8fbe0e59 tcp: Replace custom WaitList with ConditionVariable.
The WaitList implementation had a race condition between checking for
the condition and acquiering the semaphore. If a thread was rescheduled
at that point, the signal could be missed due to the use of
release_sem_etc() with the B_RELEASE_ALL flag while the thread was not
yet waiting for the semaphore. The transfer would subsequently stall.
2015-08-02 23:21:10 +02:00
Michael Lotz 2fdea65c3a tcp: Fix 64 bit build with debugging features enabled. 2015-08-02 23:21:10 +02:00
Michael Lotz 86b5886640 BReferenceable docs: Fix a typo and one obvious mixup. 2015-08-02 23:19:07 +02:00
Michael Lotz f9a8f3e727 Clean up various whitespace and fix one header guard. 2015-08-02 23:19:07 +02:00
Michael Lotz 29e8040d58 log_overlay: Fix 64 bit build and add to image. 2015-07-05 10:40:01 +02:00
Michael Lotz 1a776b25ce fat: Fix debug build after creation time cleanup in hrev49339. 2015-07-05 10:09:01 +02:00
Michael Lotz dbaafd15c0 fat: Remove directory from dlist on unlink, not in remove_vnode.
The removal of the vnode happens later than the actual unlink. As part
of the unlink, the vnode cache is already updated to mark the unlinked
directory invalid. This means its entry in the directory list needs to
be removed as well. Otherwise, if a directory list entry is looked up
in the time between unlink and remove_vnode, the assertion which checks
the validity of the directory list entries would fail.
2015-07-04 23:32:08 +02:00
Michael Lotz adc769a79f fat: Fix function name in debug output. 2015-07-04 23:32:07 +02:00
Michael Lotz b241080102 fat: Fix corruption of file data with removed directory entries.
Directory entries are cached using the block cache, so the cached
blocks need to be discarded when directories are removed/shrunk.
Otherwise freed directory blocks that were reused for file data would
later be clobbered when the block cache was flushed.

The forced cache sync for removable media hid the problem for these
devices. It was easily triggered on non-removable media however.
2015-07-04 23:32:07 +02:00
Michael Lotz de3763846d fat: Whitespace cleanup only. 2015-07-04 23:32:06 +02:00
Michael Lotz 59891eb49c fat: Remove cluster cache init and data structure.
The cluster cache was used before porting to the file map API and is
not and can not be used there anymore.
2015-07-04 23:32:06 +02:00
Michael Lotz b8cacf4e62 fat: Remove commented out code, now in dosfs_get_file_map(). 2015-07-04 23:32:05 +02:00
Michael Lotz 17a45292ec fat: Greatly simplify and clean up dosfs_get_file_map().
There's no real need to distinguish between first/middle/last parts of
the file and much of the initialization can be done simpler.

This also checks for overflows when truncating the requested length. On
64 bit platforms this would always happen due to the kernel file map
code requesting (size_t)-1 (i.e. unlimited) extents. This lead to the
file end being reached when building the map from a position unequal 0,
which would happen for files fragmented enough to need more than the
default of 8 supplied vectors. An IO error was returned in that case,
rendering the file partially unreadable.
2015-07-04 23:32:04 +02:00
Michael Lotz 87af13952c fat: Fix time format constant, fixing debug build of FAT fs. 2015-05-10 18:31:04 +02:00
Michael Lotz 52bf63bbbb fat: Fix compiler warnings. 2015-05-02 15:49:55 +02:00
Michael Lotz 09592b1dcc fat: Fix stack corruption on 64 bit due to wrong count type.
On 64 bit platforms a 64 bit size_t was written at the (incorrect)
uint32 on the stack, causing the adjacent bytes variable to be
clobbered. Because of this, the vectors wouldn't actually be filled
with any file data, making the content of files inacessible.
2015-05-02 15:49:55 +02:00
Michael Lotz 110eea4517 fat: Print format, whitespace and style cleanup only.
I took the liberty to convert most of the debug output from hex to
decimal as unprefixed hex values are rather confusing.
2015-05-02 15:49:54 +02:00
Michael Lotz 8361c0f11a ActivityMonitor: Fix leak of message when saving settings.
Adding a message to a message does not transfer ownership.
2015-04-23 23:13:20 +02:00
Michael Lotz ea9f4d993c Tiny whitespace cleanup only. 2015-04-23 23:12:23 +02:00
Michael Lotz 5919f6d4af screen_saver filter: Fix use-after-free on destruction.
Stop watching nodes before quitting and therefore deleting the looper
that was subscribed.
2015-04-23 23:09:40 +02:00
Michael Lotz 5d05694ad6 kernel guarded heap: Implement allocations debugger command.
It can be used to dump the current heap allocations with their details
and stack traces if enabled.
2015-04-23 23:04:38 +02:00
Michael Lotz 453ee84e23 kernel guarded heap: Also store team id for allocations. 2015-04-23 23:01:53 +02:00
Michael Lotz 337c4ccf01 kernel debugger: Use memcpy for stack trace on kernel stack.
If it was already determined that the memory is within the kernel
stack, a simple memcpy is enough.

This allows capturing kernel stack traces in situations where a fault
handler cannot be installed (i.e. where one is already installed).
2015-04-23 22:54:45 +02:00
Michael Lotz c14658c763 keyboard input device: Fix 64 bit debug build. 2015-04-23 22:50:10 +02:00
Michael Lotz 26bebb13a1 usb_hid: Avoid read/writing past allocations with report items.
When extracting/inserting report items there might not be a full uint32
available in the report anymore. Only copy as many bytes as are actually
needed by the report item and guaranteed to be present in the report.
2015-04-23 22:50:10 +02:00
Michael Lotz 87c27f4f27 usb_hid: Fix copy length of key state array.
Twice the size was copied due to a missed adjustment in hrev31839,
reading past the key state array. This didn't cause any corruption
because the overwritten state wasn't used anymore later on and the
write didn't overrun. It could cause a crash however if the read went
past the allocated area.
2015-04-23 22:50:10 +02:00
Michael Lotz 0034a3c515 usb_hid: 80 character limit cleanup. 2015-04-23 22:50:09 +02:00
Michael Lotz 127092c594 usb_hid: Rename cookie flag define to be more descriptive. 2015-04-23 22:50:09 +02:00
Michael Lotz 25f723de85 usb_hid: Let protocol handlers know of their closing.
On close a flag is set in the cookie of this user of a protocol handler
and the device cancels its pending transfer. This wakes up any possible
listeners. When the closed flag is set, an error code is returned from
_ReadReport() which causes the retry loop to be left. Handlers listening
on the same device which were not closed just retry the transfer.

This ensures that closing a device will cause pending control requests
to complete with a sensible error code.
2015-04-23 22:50:09 +02:00
Michael Lotz bdf0418f5c input_server: Fix handling of received -q argument.
BApplication::ArgvReceived() is called in the already running app in
case of a silent relaunch. It is therefore enough to just post a quit
message.
2015-04-20 23:40:34 +02:00
Michael Lotz 9b3be14015 BApplication: Fix B_ARGV_* handling on silent relaunch.
In hrev47355 a logic reversal was introduced as part of a cleanup
commit which caused B_ARGV_RECEIVED to be sent only to apps with the
B_ARGV_ONLY flag set instead of clear.

In addition to that, don't send the B_SILENT_RELAUNCH message for apps
with B_ARGV_ONLY either, as they are not supposed to receive messages
after launch. This is in line with the documentation and what BRoster
does.
2015-04-20 23:27:52 +02:00
Michael Lotz 62d30d9e49 libmedia: Put AddOnManager into BPrivate::media namespace.
The AddOnManager was in the global namespace, clashing with application
classes with the same name.

The input_server has an AddOnManager of its own. When the
shortcut_catcher filter was loaded by said AddOnManager, it in turn
loaded libgame.so, which in turn loaded libmedia.so, where an
AddOnManager was created for the global AddOnManager instance in
libmedia.so. Unfortunately the wrong AddOnManager, the one from the
input_server, was created. This lead to two AddOnManagers being active
in the input_server which very well could be responsible for #11049
and #11280.

This was a regression since the move of the AddOnManager from the
media_server to libmedia.so in hrev47086. This also fits with the two
tickets.

I actually noticed the problem when debugging the shutdown process of
the input_server, where the destruction of the wrong AddOnManager
caused a deadlock with itself.
2015-04-19 23:47:05 +02:00
Michael Lotz eebdc855b8 userlandfs: Fix 64 bit debug build. 2015-04-18 22:31:11 +02:00
Michael Lotz 859686a51c Tracker: Fix use-after-free in info window attribute view dtor.
The model was owned by the info window and is gone at the point where
the AttributeView is destroyed. Since the extra check whether the model
is a symlink isn't really needed at all, I opted to just remove it
instead of destroying the AttributeView sooner or unsetting its model.
2015-04-18 14:19:03 +02:00
Michael Lotz 359d64ed66 network stack: Style fix of constant name. 2015-04-18 14:09:27 +02:00
Michael Lotz ebea950b2d BLayout: Don't delete the layout of the view in RemoveView().
The layout item representing the layout of the view to be removed is
owned by the view and must not be deleted. The layout only owns the
item if a new layout item was created when adding the view, i.e. when
it did not have a layout.

Fixes the underlying issue that triggered #11976.
2015-04-18 13:32:19 +02:00
Michael Lotz 56a63697ae notification_server: Don't remove the views from the layout.
Removing the view from the window and deleting it is fine. This is a
quick fix for #11976. The underlaying issue of how BLayout::RemoveView
should work still needs to be fixed.
2015-04-16 21:44:59 +02:00
Michael Lotz b598325acc BView: Move tooltip release and fix small coding style issues.
This is only an optical change.
2015-04-15 00:34:09 +02:00
Michael Lotz e837ee8bc6 BView: Fix destruction order of layout items.
Because of the virtual hooks a BLayout must never be destroyed while it
still has layout items. If these items are only removed from the layout
in its destructor, the subclass version of hooks like ItemRemoved() are
not called anymore. This lead to leaks because many BLayout subclasses
use the ItemRemoved() hook to clean up associated data (as is suggested
explicitly in the BLayout documentation).

In the same line of thought, a BLayoutItem must never be deleted when it
is still attached to a layout, as it similarly has virtual hooks like
DetachedFromLayout() that can not be called at this point anymore.

The destructors of BLayout and BLayoutItem now have debugger calls in
case these conditions are not met which should help to avoid
accidentally introducing such hard to debug issues.

To ensure the correct destruction order the sequence is now:

* Destroy the child views first. This cleans up their layout items while
  the layout tree is still intact.
* Unset the view layout before removing layout items so it can properly
  detach from the layout instead of just deleting it.
2015-04-15 00:34:07 +02:00
Michael Lotz 0cc8c71bba BLayoutItem: Add RemoveSelf() convenience method.
It works analoguous to BView::RemoveSelf(), i.e. it removes itself from
the parent (layout in this case) and returns whether or not it had and
was successfully removed from said parent.
2015-04-15 00:34:05 +02:00
Michael Lotz 19bb9ef937 BView: Remove old TODO comment.
The BShelf is not owned by the BView (nor the BWindow for that matter)
and so must not be deleted on destruction.
2015-04-15 00:34:04 +02:00