Opened 10 years ago
Last modified 2 years ago
#11929 closed bug
PackageVolumeInfo template usage results in crash on non-PM TARFS initrd — at Version 1
Reported by: | kallisti5 | Owned by: | axeld |
---|---|---|---|
Priority: | normal | Milestone: | Unscheduled |
Component: | System/Boot Loader | Version: | R1/Development |
Keywords: | arm tarfs | Cc: | |
Blocked By: | Blocking: | ||
Platform: | arm |
Description (last modified by )
No idea what the solution is. In theory we should fall through the "apparently not packaged" if, but don't make it there.
In src/system/boot/loader/vfs.cpp
BReference<PackageVolumeInfo> packageVolumeInfoReference( new(std::nothrow) PackageVolumeInfo);
In src/system/boot/loader/vfs.cpp
status_t BootVolume::_SetTo(Directory* rootDirectory, PackageVolumeInfo* packageVolumeInfo, PackageVolumeState* packageVolumeState) { TRACE(("QUACK2.0\n")); Unset(); TRACE(("QUACK2.1\n")); if (rootDirectory == NULL) return B_BAD_VALUE; fRootDirectory = rootDirectory; fRootDirectory->Acquire(); TRACE(("QUACK2.2\n")); // find the system directory Node* systemNode = fRootDirectory->Lookup("system", true); if (systemNode == NULL || !S_ISDIR(systemNode->Type())) { if (systemNode != NULL) systemNode->Release(); Unset(); return B_ENTRY_NOT_FOUND; } TRACE(("QUACK2.3\n")); fSystemDirectory = static_cast<Directory*>(systemNode); TRACE(("QUACK2.4\n")); if (packageVolumeInfo == NULL) { TRACE(("QUACK2.5.1\n")); // get a package volume info BReference<PackageVolumeInfo> packageVolumeInfoReference( new(std::nothrow) PackageVolumeInfo); TRACE(("QUACK2.5.2\n")); status_t error = packageVolumeInfoReference->SetTo(fSystemDirectory, "packages"); TRACE(("QUACK2.5.3\n")); if (error != B_OK) { // apparently not packaged return B_OK; } fPackageVolumeInfo = packageVolumeInfoReference.Detach(); } else { TRACE(("QUACK2.6.1\n")); fPackageVolumeInfo = packageVolumeInfo; fPackageVolumeInfo->AcquireReference(); TRACE(("QUACK2.6.2\n")); }
Result:
tarfs: "system/add-ons/kernel/boot/silicon_image_3112", 0 bytes tarfs: "system/add-ons/kernel/boot/legacy_sata", 0 bytes tarfs: "system/add-ons/kernel/boot/it8211", 0 bytes tarfs: "system/add-ons/kernel/boot/uhci", 0 bytes tarfs: "system/add-ons/kernel/boot/ohci", 0 bytes tarfs: "system/add-ons/kernel/boot/ehci", 0 bytes tarfs: "system/add-ons/kernel/boot/scsi_cd", 0 bytes tarfs: "system/add-ons/kernel/boot/scsi_disk", 0 bytes tarfs: "system/add-ons/kernel/boot/usb_disk", 0 bytes tarfs: "system/add-ons/kernel/boot/norflash", 0 bytes tarfs: "system/add-ons/kernel/boot/intel", 0 bytes tarfs: "system/add-ons/kernel/boot/session", 0 bytes tarfs: "system/add-ons/kernel/boot/attribute_overlay", 0 bytes tarfs: "system/add-ons/kernel/boot/bfs", 0 bytes tarfs: "system/add-ons/kernel/boot/iso9660", 0 bytes tarfs: "system/add-ons/kernel/boot/packagefs", 0 bytes tarfs: "system/add-ons/kernel/boot/write_overlay", 0 bytes tarfs: "system/kernel_arm", 2165897 bytes 0x8098e1e0::Close() 0x8098e1e0::Release(), fRefCount = 2 0x8098e270::Acquire(), fRefCount = 2 QUACK1 QUACK2.0 QUACK2.1 0x8098e270::Acquire(), fRefCount = 3 QUACK2.2 0x8098e580::Acquire(), fRefCount = 2 QUACK2.3 QUACK2.4 QUACK2.5.1 <LOCKUP>
Note:
See TracTickets
for help on using tickets.