accesses the scheduler data inside the thread structure, freeing it first lead
to a crash when a thread couldn't be created.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33940 a95241bf-73f2-0310-859d-f6bbb57e9c96
returns valid data. Since the data is still valid in the copy, we don't need
to clear the corresponding flag when copying a message. This is most probably
the same behaviour as in R5 as Tracker seems to expect that in the case where
a drop is done after a menu was displayed as in #4757. Thanks to aldeck for
tracking that one down inside Tracker, should fix#4757.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33746 a95241bf-73f2-0310-859d-f6bbb57e9c96
the bin sizes ensure that when hitting this case it always allocates multiple
pages. This makes it more flexible for other use cases though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33726 a95241bf-73f2-0310-859d-f6bbb57e9c96
fit into the existing area. In that case further reallocs could then assume the
wrong previous size and then not copy enough from the original buffer, leading
to lost bytes at the end of the new buffer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33724 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Allow an allocator to be created on the heap to allow for non-locked
allocators to be created.
* Some cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33721 a95241bf-73f2-0310-859d-f6bbb57e9c96
read out in the ConditionVariableEntry::WaitStatus(). That way you can notify
with a specific status that can be read out on the other end.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33718 a95241bf-73f2-0310-859d-f6bbb57e9c96
wait status and therefore would return directly without actually blocking.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33681 a95241bf-73f2-0310-859d-f6bbb57e9c96
Restore ignoring the BIOS provided width and height in case the timings
suggest a bigger dimension. Also re-add the corresponding comment. Should
fix#4810 and might affect #4807 as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33652 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Check for overflows in memory allocation. If someone happened to (erroneously)
try to allocate a negative amount of memory we could overflow and crash
because of the sizes getting messed up.
* Review and update the alignment logic which was a bit broken for the huge
allocation case (reaching the area threshold). Also assert the results so
next time this will be easier to spot.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33638 a95241bf-73f2-0310-859d-f6bbb57e9c96
actual digits. Therefore the buffer was always too small leading to memory
corruption. Use the version that allocates the string for us instead, then trim
it and assign it to the result.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33566 a95241bf-73f2-0310-859d-f6bbb57e9c96
these interfaces are now available.
* Don't be quite so paranoid by default, the checks that are on by default
should be enough to detect most memory corruptions.
This makes the debug heap way more usable, so much that you can even use it as
your normal everyday heap without noticing much performance impact (it has quite
a bit of additional memory overhead though).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33544 a95241bf-73f2-0310-859d-f6bbb57e9c96
libroot. The mutex is a simple benaphore, the rw_lock is pretty much the same
as the one from libkernelland_emu but uses a mutex per lock instead of emulating
a global thread lock. Also added MutexLocking and RWLock{Read|Write}Locking and
AutoLockers based on them. It's cased with __cplusplus so the locks are also
usable from C. Everything's currently exposed in shared/private/locks.h but I
think we should make these locking primitves public.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33543 a95241bf-73f2-0310-859d-f6bbb57e9c96
in the free and/or clear queue. This performs better in the case where only few
pages are free/clear but performs worse in the case where there are a lot of
usable pages. It's not used anywhere but it might come in handy one time.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33527 a95241bf-73f2-0310-859d-f6bbb57e9c96
PageWriteTransfer. This makes the transfer accept virtually contiguous pages,
where the offset is contiguous on either end of the current transfer, but where
the pages aren't physically contiguous. It will then add seperate iovecs for
these pages (32 at max right now). This reduces the number of IO requests
generated and allows for optimizations down the IO path (like in the physical to
virtual mapping case for example).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33526 a95241bf-73f2-0310-859d-f6bbb57e9c96
need for the IO -> InternalIO indirection as it is always fed virtual buffers,
which simplifies things a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33525 a95241bf-73f2-0310-859d-f6bbb57e9c96
is virtual already it just returns the vecs directly, if it is physical it takes
over the task of virtualizing the vecs either using vm_map_physical_memory_vecs,
if there are multiple vecs or more than one page, or falls back to page wise
mapping if mapping fails or is not needed. In the best case, scattered physical
pages are mapped into one linear virtual buffer so that subsystems operating on
virtual memory only get a single vector and can then burst read/write.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33524 a95241bf-73f2-0310-859d-f6bbb57e9c96
takes a list of iovecs describing the physical pages to be mapped. With it one
can map a set of physically disjoint pages into one linear virtual range. This
is a private API right now, but we might want to make it public as
map_physical_memory_vecs alongside map_physical_memory.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33523 a95241bf-73f2-0310-859d-f6bbb57e9c96
contiguous. Was used to optimized CD boot before the alpha release.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33521 a95241bf-73f2-0310-859d-f6bbb57e9c96
are required to be physically contiguos, which should be reworked to put them
into seperate iovecs. Still this manages to combine a great deal of page
writes into larger bursts already. Reduces the amount of IO requests being
scheduled (and greatly benefits media where page wise writes are slow when
they are accessed through a non-IOScheduler path, i.e. USB mass storage until
that is properly implemented).
* Abstracted per page page writing tasks into a PageWriteWrapper class.
* Abstracted per transfer page writing tasks into PageWriteTransfer class which
formerly was the PageWriterCallback.
* Use both classes from the PageWriterRun and from
vm_page_write_modified_page_range to remove code duplication.
* Adjusted synchronous VMAnonymousCache::Write() to cope correctly with larger
iovecs and more than one iovec. It assumed that there was exactly one page per
vector previously.
* Introduced MaxPagesPerWrite() and MaxPagesPerAsyncWrite() to VMCache to allow
a cache to specify restricitions. VMAnonymousCache does restrict the max pages
to 1 for WriteAsync right now as I didn't feel like reworking that one to cope
with non single page writes just yet.
* Pulled out PageWriteTransfer methods for better readability.
* Some typo fixes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33507 a95241bf-73f2-0310-859d-f6bbb57e9c96
reads or writes for old style drivers, map the physical memory at once. Since
USB is pretty much the only one affected and there small reads/writes are
exponentially slower, the performance gain of the burst transfer far outweighs
the additional overhead of the mapping. Still this could be further optimized
and will eventually be superseeded by also providing a physical memory API in
USB. For now it should bring back USB reads to an acceptable level. Writes are
still page wise though because of how writing back memory works in general.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33503 a95241bf-73f2-0310-859d-f6bbb57e9c96
reading the message as an actual string will run into problems.
Should fix#4697.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33442 a95241bf-73f2-0310-859d-f6bbb57e9c96
security and compression for the session. This allows to keep these layers
separate from the actual protocol. This needs to be run from the command line,
as it will request ssh auth there. After connecting it will export the needed
env variable and run the specified shell (Terminal by default) on the remote
host to make it connect to the local client app.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33418 a95241bf-73f2-0310-859d-f6bbb57e9c96
primitives by providing a RemoteDrawingEngine and a RemoteHWInterface.
Not really optimized yet, still a bit WIP.
* Adding corresponding infrastructure like a blocking ring buffer and network
sender/receiver that are attached to the buffers to feed/drain them as well
as a RemoteMessage helper that provides a message based interface.
* Adding target screen concept to request an app to be run on a specific screen.
It's controlled by the TARGET_SCREEN environment variable which is added on
the app side and sent to the app_server.
* Right now only remote target screens are supported, in which case a new
RemoteHWInterface is created that tries to connect to the given host:port.
* Fix shape bounds when drawing, they need to be translated by the pen position
and converted to screen like the points as well. Wasn't visible though as the
bounds weren't used in the normal DrawingEngine.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33417 a95241bf-73f2-0310-859d-f6bbb57e9c96
also providing Lock() and Unlock(). Applied public header style.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33367 a95241bf-73f2-0310-859d-f6bbb57e9c96
based protocol as the X vmmouse driver does. It yields proper absolute pointer
positions under both the normal VMWare console and using the builtin VNC server.
Therefore "fixes" the issue seen in #4630.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33298 a95241bf-73f2-0310-859d-f6bbb57e9c96
all the USB drivers working with this single compat header. Usefulness might
be questionable, but since I did the work anyway, why not check it in as well...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33243 a95241bf-73f2-0310-859d-f6bbb57e9c96
the original BeOS input_server will fail to detect the error and never close
the device.
* Remove the empty kernel_cpp header and use the one from kernel util instead.
* Add some missing headers for completeness.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33242 a95241bf-73f2-0310-859d-f6bbb57e9c96
return an error.
* Properly use the name length instead of a hardcoded buffer size when composing
the name of the raw device and ensure proper termination.
* Case new ioctls for Haiku as the target platform. Indeed this driver works
fine on BeOS even though it was written natively for Haiku.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33240 a95241bf-73f2-0310-859d-f6bbb57e9c96
anymore. It could happen that the transfer was already in the process of being
finished, so wasn't in the list of pending transfers anymore. Cancel would then
return even though the callback wasn't called yet. This could lead to a callback
being called after a driver was already unloaded (even after it cleaned up the
pipes it used).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33239 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Also rename it from pad1 to code_area as that's what it is.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33146 a95241bf-73f2-0310-859d-f6bbb57e9c96
transfer to the transfer list and scheduling the transfer descriptors on the
controller by switching the endpoint tail. Since we only check that the endpoint
head is equal to the endpoint tail to conclude that there are no active
transfers, we need to ensure that we don't accidently do that check before the
transfer descriptors are scheduled. Otherwise we could happen to processed a not
yet started transfer and finishing it before an actual transfer has taken place.
This would then lead to 0 byte transfers and toggle mismatches. To fix this we
now protect the transfer addition and tail switching as well as the check in the
finisher with a per-endpoint mutex. Note that we allocate the lock on the heap
and only store the pointer in the endpoint structure as this one is allocated
from the precious physical memory pool. Could fix#4067.
Also switched the Jamfile to UsePrivateKernelHeaders (for the MutexLocker) and
removed BeOS compatibility.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33129 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Draw a pseudo mouse instead of using the bitmap. It's ugly and should be done
properly by someone with more of an artistic talent than me. But it should do
for now.
* Downright removed the little icons. The code is still there, but since the
icons aren't there anymore it will simply fail to load them and not use them.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33078 a95241bf-73f2-0310-859d-f6bbb57e9c96
user and group ids on build platforms that support them. Fixes#4458.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33066 a95241bf-73f2-0310-859d-f6bbb57e9c96
can cause overflows.
* Added a generic IS_VALID_SPOT() macro that checks for overflows and checks if
the area will fit with the given constraints.
* Use the macro to simplify the places where these checks are necessary.
* Use the provided "end" limit instead of the address space end. It currently
doesn't matter but makes more sense.
* Rename newBase variables to alignedBase as that's what they are.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33061 a95241bf-73f2-0310-859d-f6bbb57e9c96
to insert areas so we don't overflow.
* Consequently use the area end (base + size - 1) where appropriate which
prevents overflows in a few places.
* Properly check for reaching the address space end.
* If we've already found a spot we don't need to recheck if we've found one.
* Simplify the B_EXACT_ADDRESS checks down to a simpler single if statement
instead of the four seperate ones.
* Properly calculate the search end for B_EXACT_ADDRESS as well, it's also
base + size - 1.
* Block the full last page now that this actually works without overflowing.
* Some style changes and added spacing.
This should now really fix#2550. Previously the overflow protection didn't
actually work because on allocation we overflowed and completely missed the
protecting area.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33037 a95241bf-73f2-0310-859d-f6bbb57e9c96
and 0xcccccccc (and 64 pages thereafter) in any way will always lead to a crash.
Before it could happen that these ranges were allocated for an area and then
accessing these would not be as evident anymore. Only enabled when the
corresponding paranoid setting is enabled (which it currently is).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33033 a95241bf-73f2-0310-859d-f6bbb57e9c96
of the VM functions handling areas are overflow safe. If an area is created that
spans across the last page many places will run into an integer overflow. This
mostly concerns the area allocation path in find_and_insert_area_slot() and also
vm_create_anonymous_area() where the loop for mapping pages for B_FULL_LOCK
areas overflows and runs more times than it should leading to #2550.
This could be seen as a workaround. The real fix would be to make everything
overflow safe. The thing is that this does also concern the user of the area
which could easily have forgotten to check for overflows as well, so I am a bit
uneasy with handing out areas that could easily lead to such hard to debug
problems. Since this is really an edge case and this single step safes quite a
bit of extra checks I'd actually be OK with keeping it that way.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33032 a95241bf-73f2-0310-859d-f6bbb57e9c96
mapped pages and a non-read and non-write protection to block a certain address
range from being used by anything.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33030 a95241bf-73f2-0310-859d-f6bbb57e9c96
end up as 0 again in any case. It certainly looks correct without it, removing
so it doesn't confuse the next one reading over it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32994 a95241bf-73f2-0310-859d-f6bbb57e9c96
break instead of after. Also whitespace after the cursor position wasn't
ignored.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32993 a95241bf-73f2-0310-859d-f6bbb57e9c96
seems to incorrectly set pseconds to 0 for the first track, leading to an LBA of
-150 which messes up session recognition. Works around VMWare issue in #4439.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32990 a95241bf-73f2-0310-859d-f6bbb57e9c96
many pages as are actually missing, not the full count.
* Take into account that free_page_queue_count() can be less than sReservedPages
(when some of the reserved pages have been allocated already) in
vm_page_num_unused_pages(). Before it could return negative and therefore
wrapped numbers.
* Simplify the page scrubber loop by continuing early. Also avoids a needless
interrupt spin lock acquisition when there's nothing to do.
* Some minor coding style cleanup.
* Fix a typo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32980 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Remove some unused members.
* Avoid initializing the mouse position to non-integer coordinates.
* The frame right/bottom are width/height - 1.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32979 a95241bf-73f2-0310-859d-f6bbb57e9c96
allows for BFS based LiveCDs. Still this whole name matching feels hacky.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32976 a95241bf-73f2-0310-859d-f6bbb57e9c96
as the other node operations.
* Differentiate between data and metadata modification, so that changes to
attributes or stat fields (other than size) dont't prevent direct IO relay.
* Suppress child finish notifications when sending subrequests to the
underlaying filesystem. Otherwise the request can be gone by the time we
try to complete it.
* Fix offsets used for IORequest::CopyData().
* Some refactoring.
* Added locking.
With that a write_overlay can be put on attribute enabled filesystems to either
make them writeable or snapshot them. This allows for example for a working
BFS based LiveCD.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32937 a95241bf-73f2-0310-859d-f6bbb57e9c96
This allows for synchronous uses where subrequests are forked off and waited on.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32936 a95241bf-73f2-0310-859d-f6bbb57e9c96
Otherwise the focus cannot be changed to another window. In one case this could
have a severe sideeffect: When a window is quit it is hidden to remove focus and
remove it from screen. If this didn't work due to the focus lock, the fFocus
member would become a stale pointer after the window was quit and deleted. The
app_server would crash or corrupt memory on the next focus change. Easily seen
when moderately quickly clicking away a few alert windows.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32929 a95241bf-73f2-0310-859d-f6bbb57e9c96
On detaching the views remove themselves from the app local token space. Since
the ServerApp only waits for all ServerWindows to be removed from the window
list and not for their actual destruction, it can happen that the ServerApp is
deleted before the window destruction and hence the view detaching has finished.
The views would then access a stale ServerApp pointer and try to remove their
token from the deleted token space. To avoid that we set the ServerApp pointer
to NULL when the window is removed from the app (as after that the app can be
gone any time) and check for that case when detaching.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32927 a95241bf-73f2-0310-859d-f6bbb57e9c96
only some sub requests worked. Previously we would have simply canceled all
of the subrequests in the loop because we cancel after the first error.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32914 a95241bf-73f2-0310-859d-f6bbb57e9c96
* An off by one error prevented the very last block of a device to be accessed
through IO.
* In case of error the request wasn't notified causing anyone (the page writer
for example) to wait forever for the request to complete.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32913 a95241bf-73f2-0310-859d-f6bbb57e9c96
by writing them into our buffers and directly satisfy read requests by copying
our buffers, filling any gaps by spawning off subrequests to the underlaying
filesystem.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32900 a95241bf-73f2-0310-859d-f6bbb57e9c96
concerned by it as it does not do file data, it simply passes the hook through.
In the write_overlay case we check for write operations and for modified nodes.
In both cases we return B_NOT_SUPPORTED which will cause a fallback to
synchronous IO. The main problem with the fallback is not that it is synchronous
but that the physical buffers of the request will be mapped and filled page
wise, which makes it slow for various reasons. In any case with this setup all
reads to write_overlay that can go through unmodified now do. This should speed
up CD boot as there is no physical to virtual translation overhead and no limit
to page wise reads. In the best case it should now read 256 blocks at the time
instead of always falling back to 2. My tests show no side effects on creating,
writing or partially modifying nodes so far.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32897 a95241bf-73f2-0310-859d-f6bbb57e9c96
capabilities to aid in debugging memory corruption issues.
It does:
* Initialize memory to 0xcc to help turn up use of uninitialized memory
* Set freed memory to 0xdeadbeef to help find accesses of freed memory
* Use the paranoid heap validation to turn up many cases of memory corruption
* Use a simplistic wall check to turn up memory overwrites past allocations
* Take extra steps to validate freed addresses to turn up misaligned frees
It has an interface to en-/disable paranoid validation and to start/stop regular
wall checking. Both are currently just enabled. At a later stage a debug version
of libroot could be used by an application and the checks enabled at will. Note
that due to the paranoid validation and the suboptimal locking this allocator
will perform horribly. Still to find memory corruption issues in the system or
also in your applications it can be helpful to build your installation with it
turned on. To enable it you currently need to edit the Jamfile to sub-include
the malloc_debug instead of the malloc directory.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32894 a95241bf-73f2-0310-859d-f6bbb57e9c96
for the page list but not the area one. Since multiple pages can be allocated
at once, even an area that is not at the top of the list can become empty. In
such a case the area list would previously have lost entries. Also because
we can remove more than one page from any area, not just the top one, we may
need to move forward in the list so that it stays ordered by free pages.
+alphabranch
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32880 a95241bf-73f2-0310-859d-f6bbb57e9c96
such a case as that would try to read info about a non-present medium.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32862 a95241bf-73f2-0310-859d-f6bbb57e9c96
it would overwrite memory and on writing it would crash further down when the
buffer is accessed. Fixes#4383.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32857 a95241bf-73f2-0310-859d-f6bbb57e9c96
we waste space, but we also incorrectly fail to update the size for all writes
that do not go beyond the previous file size.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32825 a95241bf-73f2-0310-859d-f6bbb57e9c96
the parent directory in those cases. Also, when updating the parent directory
we need to update the ".." dirent if we already populated it with a different
value before.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32823 a95241bf-73f2-0310-859d-f6bbb57e9c96
fixes#4358, there changing the Tracker preferences causes some default
directories to be created, like "home" and "config", which were previously
simply killing off the real ones.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32822 a95241bf-73f2-0310-859d-f6bbb57e9c96
ensure that these nodes are never put. As they keep all changes in memory,
putting them and consequently freeing them destroys the modifications without
a way to get them back from the underlaying filesystem. In case a created node
was put but still had its entry in the parent directory this could also lead
to the situation where an invalid node was requested from the underlaying
filesystem, leading to #4347.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32815 a95241bf-73f2-0310-859d-f6bbb57e9c96