Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold 1bd0748253 Fix crash in MemoryManager::PerformMaintenance()
sFreeAreaCount wasn't decremented after removing an area from
sFreeAreas, thus causing the loop to continue until enountering and
crashing on a NULL pointer after removing the last area. Introduce
helper methods _PushFreeArea() and _PopFreeArea() to ensure this cannot
easily happen again.

Fixes ticket #8972.
2012-09-11 22:31:19 +02:00
Ingo Weinhold 7483c98dec Debugger (and some friends): 64 bit fixes 2012-08-05 23:58:25 +02:00
Ingo Weinhold 9b008d31ff Debugger CLI: Add a bunch of new commands
* "thread": prints/sets the current thread.
* "continue", "stop": continue/stop the current thread.
* "sc"/"bt": Print a stack trace for the current thread. Very basic yet.
2012-08-05 01:07:17 +02:00
Ingo Weinhold 86b1039b42 Debugger CliContext: More event handling, current thread
* Introduce the notion of a current thread. That's the one certain
  commands will target (by default).
* Add more event handling in CliContext. There's now a queue of pending
  events which are printed in the input loop at convenient times to
  inform the user about what happened (new/deleted/stopped threads,
  etc.).
2012-08-05 01:07:17 +02:00
Ingo Weinhold 59dbbd147e Debugger: CliQuitCommand: Fix cancel shortcut 2012-08-05 01:07:16 +02:00
Ingo Weinhold d4586180a6 Debugger CLI: Improve "help" command
Given a command name it prints the command's usage.
2012-08-05 01:07:16 +02:00
Ingo Weinhold a7580a8299 Debugger: Add CliCommand::PrintUsage() 2012-08-05 01:07:16 +02:00
Ingo Weinhold d266c87d17 Debugger: CliContext: Introduce the notion of events
* The input loop can now wait on abstract events, which other threads
  (or even the input loop thread itself) can signal.
* Use the new mechanism in QuitSession().
* Also (with the exception of the SIGINT part) implement
  WaitForThreadOrUser().
2012-07-29 00:28:56 +02:00
Ingo Weinhold 4d8eaa5b11 Debugger: UserInterface.h: style cleanup 2012-07-29 00:28:56 +02:00
Ingo Weinhold 726d557c9e Debugger CLI: Wait for TeamDebugger thread to die before exit() 2012-07-29 00:28:56 +02:00
Ingo Weinhold 8fe9f8b2d0 Debugger CLI: Move more stuff to and extend CliContext
* Move the libedit interface there and provide nicer to use methods.
* Also start adding utility methods for the input loop. It is going to
  manage all interactions of the input loop with outside events.
* Fix the "quit" command. The user is now prompted what to do with the
  debugged team and the input loop thread avoids reentering the input
  loop.
2012-07-27 23:42:01 +02:00
Ingo Weinhold eba38eb503 Debugger: Change user interface quit and ask user semantics
* UserInterface::SynchronouslyAskUser() is now allowed to return -1 to
  indicate that the user cannot be asked at this point for whatever
  reason. The caller needs to handle that case.
* UserInterfaceListener::UserInterfaceQuitRequested(): Add new parameter
  "quitOption" to specify what is supposed to happen. The previous
  behavior (ask user) is only one of the options. The others are to kill
  the debugged team or to resume it.
2012-07-27 23:42:01 +02:00
Ingo Weinhold f58478507c Debugger: In CLI mode block SIGINT in all threads
It is supposed to be handled in the input loop thread only (eventually).
2012-07-27 23:42:00 +02:00
Ingo Weinhold 71e5d26b5f Debugger: Add utility class SignalSet 2012-07-27 23:42:00 +02:00
Ingo Weinhold aacf2782d8 Debugger: Switch from readline to libedit 2012-07-25 00:11:14 +02:00
Ingo Weinhold f4b1ddb580 Debugger: Coding style: normalize naming, some whitespace fixes
* TeamUISettings[Factory] -> TeamUiSettings[Factory]
* GUITeamUISettings -> GuiTeamUiSettings
* GUISettingsUtils -> GuiSettingsUtils
2012-07-24 00:28:37 +02:00
Ingo Weinhold 48b4d20480 Debugger CLI: Add "threads" command
It just lists the team's thread.
2012-07-23 23:52:46 +02:00
Ingo Weinhold 533a73766d Debugger: Create UiUtils helper class
Currently only a method to get a description for a thread state lives
there (code pulled from ThreadListView).
2012-07-23 23:52:46 +02:00
Ingo Weinhold a6de32b06c Debugger CLI: Pull QuitCommand out of CommandLineUserInterface 2012-07-23 23:52:46 +02:00
Ingo Weinhold d0ef75400b Debugger CLI: Start to imbue CliContext with life 2012-07-23 23:52:45 +02:00
Ingo Weinhold abbcb2caf5 Debugger: Use readline in the CLI
This is a bit hacky, since gdb's readline is used. It would probably be
best to prepare an optional build package.
2012-07-23 23:52:45 +02:00
Ingo Weinhold 0a592099a9 Debugger: Rework CLI setup to no longer create a BApplication
The main thread does now serve the CLI input loop.
2012-07-21 09:19:18 +02:00
Ingo Weinhold 6d60b554e6 Debugger: Some basic work to get the CLI going
There's an input loop thread which reads and parses command lines and
the infrastructure for registering and executing commands. Currently
only "help" and "quit" commands are implemented.
2012-07-20 23:32:58 +02:00
Ingo Weinhold 0f1f968ffb Debugger: Actually create the CLI, if requested 2012-07-20 23:32:58 +02:00
Ingo Weinhold af350aa218 Add private shared class ArgumentVector
The parser is based on the FS shell's ArgVector.
2012-07-20 23:32:58 +02:00
Ingo Weinhold e6418c88b5 Declare syscall_numbers.h include for x86_signals_asm.S
Fixes #8718 (again).
2012-07-13 07:08:52 +02:00
Ingo Weinhold 8c51cca27e Fix accidental partial revert of 0174267 2012-07-12 11:06:10 +02:00
Ingo Weinhold b1700b2cd1 Declare syscall_numbers.h include for x86_signals.cpp
Fixes #8718.
2012-07-12 10:54:30 +02:00
Ingo Weinhold e2d2662bc4 Automatic whitespace cleanup 2012-07-12 10:53:42 +02:00
Ingo Weinhold 69a8b95491 FixedWidthPointer: Fix ==/!= operators, remove OtherType casts
* FixedWidthPointer:
  - operators ==/!=: Change second operand type from void* to const
    Type*. Also add non-const version to resolve ambiguity warning when
    comparing with non-const pointer.
  - Add Pointer() getter.
  - Remove templatized cast operators. They are nice for casting the
    pointer directly to another pointer type, but result in ambiguity.
* Make preloaded_image::debug_string_table non-const. Avoids clashes of
  the const and non-coast FixedWidthPointer comparison operators. A
  cleaner (but more verbose) solution would be to spezialize
  FixedWidthPointer for const types.
2012-06-24 15:26:00 +01:00
Ingo Weinhold c83bde410a switch_sem_etc(): Unbreak the actual switch case
The scheduler lock was still being held when release_sem_etc() was
called. The bug was introduced in
24df65921b. Fixes #8448.
2012-04-05 17:35:59 +02:00
Ingo Weinhold 06114afc50 userlandfs: Remove superfluous driver_settings.c
It probably dates back to a time before our libroot exported the driver
settings API as well.
2012-04-04 21:53:00 +02:00
Ingo Weinhold 7e2730f048 View.cpp: Use B_IF_GCC_2 to simplify things 2012-02-19 15:16:07 +01:00
Ingo Weinhold 547ad24cea Add macro B_IF_GCC_2
It resolves to an "if" or "else" parameter depending on the gcc version.
2012-02-19 15:11:57 +01:00
Ingo Weinhold 88520e79d8 create_thread_user_stack(): Fix incorrect handling of TLS size
In case a custom stack was given, the TLS size was subtracted from the
stack base, not the stack size.
2012-02-12 15:04:30 +01:00
Ingo Weinhold 65f03741af Add GPT module to the boot modules
This is necessary so a disk with a protective MBR is not incorrectly
recognized when the kernel first scans it.
2012-02-10 22:55:45 +01:00
Ingo Weinhold a5c5479710 media addon server: Fix incorrect array offset for safe mode
Missed that when back porting 323b65468e.
2011-12-08 22:17:58 +01:00
Ingo Weinhold 363c147d86 FreeBSD host sys/stat.h: Add missing extern "C" 2011-11-28 05:11:35 +01:00
Ingo Weinhold d68eb11df9 fs_attr_generic.cpp: Fix warning 2011-11-28 05:02:27 +01:00
Ingo Weinhold 62f5df5852 Provide futimens(), utimensat() missing on FreeBSD 2011-11-28 05:02:09 +01:00
Ingo Weinhold b328f5b034 libroot_build: Explicitly support FreeBSD struct stat anomalies
Use stat::st_{a,m}timespec on FreeBSD instead of the POSIXish
stat::st_{a,m}tim. Fixes part of the FreeBSD build issues recently
introduced.
2011-11-28 04:30:49 +01:00
Ingo Weinhold 34afc17190 PackageLinkDirectory::_Update(): Don't unlock after delete
When using an AutoLocker on an object, the lock must be released
explicitly before releasing the last certain reference to that object.
2011-11-25 06:20:06 +01:00
Ingo Weinhold b8ae1eb25d Volume::_RemoveNodeAndVNode(): Squash TODO
Only get/remove/put the vnode when the node is actually known to the
VFS. This does not only save unnecessary work, it also solves a
(temporary) deadlock -- at least partially. If another thread caused a
call to our get_vnode() hook just before, it would block on the volume
lock we're holding when adding/removing packages. The vnode would be
marked busy until the other thread's request was fulfilled and our call
to get_vnode() would block until timing out. Now we're calling
get_vnode() only, if we already know that the VFS already has a valid
vnode.

There still remains a race condition. If the VFS discards the vnode
right before we call get_vnode(), we essentially have the same situation
as before (i.e. us calling get_vnode() although the vnode is no longer
known to the VFS) with the same potential problem. For a real solution
we need a get_vnode() variant which can be told not to block.
2011-11-25 06:20:05 +01:00
Ingo Weinhold bbf2abc503 Node: Keep track of VFS init status
* Node::VFSInit() and VFSUninit() set/clear the new node flag
  NODE_FLAG_KNOWN_TO_VFS. They need to be called by overriding methods,
  now.
* Add Node::IsKnownToVFS() which returns the VFS init status.
2011-11-25 06:20:05 +01:00
Ingo Weinhold d9ec209546 Fix removing dependencies on package removal
The dependencies must also be dissociated from the resolvables they have
been resolved to.
2011-11-25 06:20:04 +01:00
Ingo Weinhold 564f56b150 Fix node handling on package addition/removal
* UnpackingLeafNode: Add a fFinalPackageNode attribute. It is set when
  the node is about to be removed and will point to the node's previous
  head package node and be used in its stead. From the perspective of
  the FS hooks this leaves the node in an unchanged state.
* Unpacking[Leaf,Directory]Node:
  - Add WillBeFirstPackageNode(), returning whether the given package
    node would become the head package node when added.
  - Add PrepareForRemoval() which removes all package nodes. In case of
    UnpackingLeafNode it also sets fFinalPackageNode.
  - Add CloneTransferPackageNodes(). It is only implemented for
    UnpackingLeafNode. It clones the node, transfers all package nodes
    to the clone and sets fFinalPackageNode on this node.
* Volume::_{Add,Remove}PackageNode(): Solved the following TODO: When a
  package is added or removed and a file present in both the
  added/removed package and another package with the version in the
  former having precedence, we have to remove the node (leaving it
  unchanged) and replace it by a new node. This prevents clients having
  the node opened or mapped from suddenly seeing different data. It also
  fixes unbalanced calls to PackageNode::VFSInit()/VFSUninit() which
  would result in file descriptors to package files being leaked.
2011-11-25 06:20:03 +01:00
Ingo Weinhold 4ba3c257e4 Fix package removal with skipped directories
Volume::_RemovePackageContentRootNode(): Check whether a directory
corresponding to the package directory does actually exist. This might
not be the case when the package directory has been skipped due to
clashing with a shine-through directory. Would crash in this case.
2011-11-25 06:20:03 +01:00
Ingo Weinhold 863eb983f8 Fix typo 2011-11-25 06:20:02 +01:00
Ingo Weinhold 085f6723a4 Fix build due to <directories.h> move
Apparently I should have done a complete rebuild after moving
directories.h from headers/private/libroot to .../system, since a lot of
stuff didn't build anymore.
2011-11-25 06:19:50 +01:00
Ingo Weinhold 9213e9d6a8 Add BPackageRoster::GetActivePackages()
The implementation is temporary. Currently it reads through the packages
in the respective packages directory and checks against the package
links. Once package activation is tracked explicitly we'll use the
activation file/directory.
2011-11-25 06:19:49 +01:00
Ingo Weinhold 26265b7b4d Add class BPackageInfoContentHandler
A BPackageContentHandler subclass that initializes a BPackageInfo from
the read package attributes. Pulled out of RepositoryWriterImpl's
PackageContentHandler.
2011-11-25 06:19:48 +01:00
Ingo Weinhold dbe2a683f0 find_directory(): Fix package links path 2011-11-25 06:19:48 +01:00
Ingo Weinhold e35a99be4c Pull class BPackageInfoSet out of BRepositoryCache 2011-11-25 06:19:47 +01:00
Ingo Weinhold f96d3856e1 Removed left-over code 2011-11-25 06:19:47 +01:00
Ingo Weinhold 9968845d69 Use BStringList in package kit
Replace all instances of BObjectList<BString> by BStringList.
2011-11-25 06:19:46 +01:00
Ingo Weinhold 7de6af25e9 Add a BStringList class 2011-11-25 06:19:45 +01:00
Ingo Weinhold ad07ecd821 BString::Private class to access BString internals 2011-11-25 06:19:45 +01:00
Ingo Weinhold 4f5f15f080 BRepositoryCache: Add iteration, etc.
* Remove InitCheck() and the initializing constructor.
* Rename PackageCount() to CountPackages().
* Use BOpenHashTable instead of HashMap for the internal PackageMap.
* Allow multiple packages with the same name. Equally named packages are
  in a singly linked list after the first package with that name.
* Add an Iterator inner class and a GetIterator() method, so one can now
  iterate through the packages in the repository.
2011-11-25 06:19:44 +01:00
Ingo Weinhold 156ea481b3 Add HashValue() methods to BString 2011-11-25 06:19:44 +01:00
Ingo Weinhold 1524eed163 Handle the newer package attributes
This unbreaks reading repository cache files using the respective
attributes.
2011-11-25 06:19:43 +01:00
Ingo Weinhold d0b2d58a4e Add error output in case of invalid compression ID 2011-11-25 06:19:42 +01:00
Ingo Weinhold 4caf282707 Fix handling of shine-through directories
* Add a new class ShineThroughDirectory for shine-through directories
  instead of using UnpackingDirectory.
* Split up setting up the shine-through directories in two steps. First
  the directories are only created. That happens before adding the
  initial package domains. After publishing the root node we bind the
  shine-through directories to the underlying directories.
* This makes adding a package directory with the same name as a
  shine-through directory fail in _AddPackageNode() as originally
  intended. Since we no longer want it to fail -- the package daemon
  will copy the files in the respective directories as part of the
  activation process -- we simply skip the directory now. Adjust
  _AddPackageNode() and _AddPackageContentRootNode() accordingly.
2011-11-25 06:19:42 +01:00
Ingo Weinhold 166412ff77 Fix notifications when adding package link dir
When adding a new package link directory, the volume would only be
notified about the addition of the directory itself, not of the addition
of its contents. Add a new PackageLinkDirectory::NotifyDirectoryAdded()
which does the whole job and use it in
PackageLinksDirectory::AddPackage().
2011-11-25 06:19:41 +01:00
Ingo Weinhold a70f4da47e Fix debug output 2011-11-25 06:19:41 +01:00
Ingo Weinhold 8fb0681018 Implement more virtuals in Node and Directory
* Node: Add default implementations for UserID(), GroupID(),
  OpenAttributeDirectory(), and OpenAttribute().
* Directory: Add default implementations for Mode() and FileSize().
* Remove the respective hook implementations in the PackageLink*
  classes.
2011-11-25 06:19:40 +01:00
Ingo Weinhold 84f50b1ce9 GetRepositoryCache/Config(): return valid entry
Always create the common repository cache/config paths so the BEntry
that is returned is valid at least. Fixes BRefreshRepositoryRequest
failing when the common repository cache path didn't exist yet.
2011-11-25 06:19:39 +01:00
Ingo Weinhold ad4fba78b2 Initialize BRepositoryInfo::fInitStatus 2011-11-25 06:19:39 +01:00
Ingo Weinhold 56fed01db3 Handle the newer package attributes 2011-11-25 06:19:38 +01:00
Ingo Weinhold 18126bc7c7 Notify earlier when removing a package node
Volume::_RemovePackageNode(): Notify listeners before removing the last
package node from the node, . This prevents the size/last modified
indices from not finding the node anymore, since the node would return
a default value instead of the value it was added to the index with.
2011-11-25 06:19:38 +01:00
Ingo Weinhold f391c9b0ea Add UnpackingNode::IsOnlyPackageNode()
It returns whether the given package node is the only package node
attached to that node.
2011-11-25 06:19:37 +01:00
Ingo Weinhold 0a9478a707 Force package names and versions to lower case 2011-11-25 06:19:37 +01:00
Ingo Weinhold 17a7f65c0a Add install path support to packagefs 2011-11-25 06:19:36 +01:00
Ingo Weinhold 1fc3ceeda2 Add options -b and -I to package command
* With -b building a build package can be requested. It will be empty
  save for the .PackageInfo. No license check is performed.
* -I allows to specify an install path.
2011-11-25 06:19:35 +01:00
Ingo Weinhold 6ae0ecd49a Add a package info "install-path" attribute
The attribute is intended for simplifying package building. The
package's install path will be used for the package's .self package
symlink, allowing installation to a temporary directory when building
the package.
2011-11-25 06:19:35 +01:00
Ingo Weinhold 7efa133cb4 BPackageWriter: Add SetCheckLicenses()
The default is still "true", but now it is possible to disable the
license check.
2011-11-25 06:19:34 +01:00
Ingo Weinhold 14f94ae7d4 Fix location of the Deskbar menu symlinks
Conflicts:

	build/jam/OptionalPackages
2011-11-25 06:19:34 +01:00
Ingo Weinhold 609fc55f96 Rename the package links directory
Rename the package links directory from /package-links to just
/packages.
2011-11-25 06:19:33 +01:00
Ingo Weinhold bde1972229 Move <directories.h> to headers/private/system 2011-11-25 06:19:32 +01:00
Ingo Weinhold 9076c04c01 Declare packagefs persistent
Besides that it is kind of correct, it also makes tracker queries work
correctly.
2011-11-25 06:19:32 +01:00
Ingo Weinhold 0b45c28c4f Implement packagefs index (dir) hooks 2011-11-25 06:19:31 +01:00
Ingo Weinhold 3b97d999e7 Add set_dirent_name() without name length parameter 2011-11-25 06:19:31 +01:00
Ingo Weinhold 9590b31b31 Remove unused IndexIterator constructor 2011-11-25 06:19:30 +01:00
Ingo Weinhold e8d560154a Remove references in index iterator interface
This avoids checks.
2011-11-25 06:19:30 +01:00
Ingo Weinhold 1197afa806 Remove superfluous checks 2011-11-25 06:19:29 +01:00
Ingo Weinhold 08bed1acb7 Check key length, if index keys are fixed length 2011-11-25 06:19:28 +01:00
Ingo Weinhold 8db89f6336 Create a "BEOS:APP_SIG" index by default 2011-11-25 06:19:28 +01:00
Ingo Weinhold 03aed3a314 Attribute index support for non-special attributes
* Add AttributeIndex class.
* Each attribute does now have an attribute index cookie. The new
  attribute index service methods Node::IndexAttribute() and
  IndexCookieForAttribute() create+set/retrieve the cookie. The cookie
  is actually the attribute index's tree node.
* Add OldNodeAttribute::IndexCookieForAttribute() so the cookie is
  available when the node changes.
2011-11-25 06:19:27 +01:00
Ingo Weinhold 1cf4d082ab More abstraction in GenericIndexIterator
* Move tree node operations to a subpolicy TreePolicy.
* Add a GenericIndexIteratorTreePolicy templatized over the policy,
  implementing the tree policy for the standard indices.
2011-11-25 06:19:27 +01:00
Ingo Weinhold af1cc77849 QueryPolicy::NodeGetAttribute(): Get the type too 2011-11-25 06:19:26 +01:00
Ingo Weinhold 28269859c8 Remove unused PackageNodeAttribute::fParent 2011-11-25 06:19:25 +01:00
Ingo Weinhold 8b07f87a91 compareKeys(): Also handle B_MIME_STRING_TYPE 2011-11-25 06:19:25 +01:00
Ingo Weinhold a54f7dc250 Move B_MIME_STRING_TYPE to <TypeConstants.h> 2011-11-25 06:19:24 +01:00
Ingo Weinhold 2c5c1adc91 Remove TwoKeyAVLTree from kernel utils again
It's not ready for shared use yet.
2011-11-25 06:19:23 +01:00
Ingo Weinhold 6cc3dcdb9b Move helper function out of QueryParser.h
They live in the new QueryParserUtils.{h,cpp} now.
2011-11-25 06:19:23 +01:00
Ingo Weinhold 8fd0aea602 AVLTreeMap fixes
* AVLTreeMap::_GetKey(): Change return type from const Key& to Key, so
  the strategy can do that as well and doesn't have have a Key object in
  the node.
* Fix the Auto strategy: It was using the undefined _GetKey() instead
  of GetKey().
2011-11-25 06:19:22 +01:00
Ingo Weinhold c5c7c2d817 Build fix 2011-11-25 06:19:21 +01:00
Ingo Weinhold ed81de869e Add last modified index support
* Add class LastModifiedIndex.
* Create and add an instance of it in Volume::Mount().
2011-11-25 06:19:21 +01:00
Ingo Weinhold e708cdd90f Removed left-over commented code 2011-11-25 06:19:20 +01:00
Ingo Weinhold ab6a1e0f74 QueryParser: The last_modified index is time_t
* Changed value type from B_INT64_TYPE to B_INT32_TYPE.
* Changed QueryPolicy::NodeGetLastModifiedTime() return value from
  bigtime_t to time_t.
2011-11-25 06:19:20 +01:00
Ingo Weinhold 3793289c21 Add size index support
* Add class SizeIndex.
* Create and add an instance of it in Volume mount.
2011-11-25 06:19:19 +01:00