# HG changeset patch # User Paul Boddie # Date 1634501409 -7200 # Node ID bda5a4ba1e70f5fe5d69d6cc30fd0d690aa43a49 # Parent 5800bd1b5ca5e645c6c6ad0cd25a07c4a36aa55c Make the file object registry available via providers. diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/include/fsserver/directory_resource.h --- a/libfsserver/include/fsserver/directory_resource.h Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/include/fsserver/directory_resource.h Sun Oct 17 22:10:09 2021 +0200 @@ -23,7 +23,6 @@ #include #include -#include #include @@ -33,7 +32,6 @@ class DirectoryResource : public Resource, public DirectoryObject { protected: - FileRegistry *_registry; DirectoryProvider *_provider; /* Notification endpoint for event subscription. */ @@ -43,8 +41,7 @@ public: fileid_t fileid; - DirectoryResource(fileid_t fileid, DirectoryProvider *provider, - FileRegistry *registry); + DirectoryResource(fileid_t fileid, DirectoryProvider *provider); virtual ~DirectoryResource(); diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/include/fsserver/file_pager.h --- a/libfsserver/include/fsserver/file_pager.h Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/include/fsserver/file_pager.h Sun Oct 17 22:10:09 2021 +0200 @@ -24,7 +24,6 @@ #include #include #include -#include @@ -33,7 +32,6 @@ class FilePager : public Pager, public MappedFileObject { protected: - FileRegistry *_registry; FileProvider *_provider; /* Notification endpoint for event subscription. */ @@ -47,8 +45,7 @@ public: fileid_t fileid; - explicit FilePager(fileid_t fileid, FileProvider *provider, map_flags_t flags, - FileRegistry *registry); + explicit FilePager(fileid_t fileid, FileProvider *provider, map_flags_t flags); virtual void close(); diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/include/fsserver/provider.h --- a/libfsserver/include/fsserver/provider.h Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/include/fsserver/provider.h Sun Oct 17 22:10:09 2021 +0200 @@ -41,6 +41,8 @@ virtual ~Provider(); + virtual FileRegistry *registry(); + virtual long make_resource(offset_t *size, object_flags_t *object_flags, Resource **resource) = 0; }; diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/lib/directories/directory_provider.cc --- a/libfsserver/lib/directories/directory_provider.cc Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/lib/directories/directory_provider.cc Sun Oct 17 22:10:09 2021 +0200 @@ -60,7 +60,7 @@ for detaching from the provider. */ this->attach(); - *resource = new DirectoryResource(_fileid, this, _registry); + *resource = new DirectoryResource(_fileid, this); return L4_EOK; } diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/lib/directories/directory_resource.cc --- a/libfsserver/lib/directories/directory_resource.cc Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/lib/directories/directory_resource.cc Sun Oct 17 22:10:09 2021 +0200 @@ -30,9 +30,8 @@ DirectoryResource::DirectoryResource(fileid_t fileid, - DirectoryProvider *provider, - FileRegistry *registry) -: _registry(registry), _provider(provider), fileid(fileid) + DirectoryProvider *provider) +: _provider(provider), fileid(fileid) { } @@ -61,15 +60,15 @@ { /* Detach the resource, potentially removing the file provider. */ - _registry->detach(fileid, _provider); + _provider->registry()->detach(fileid, _provider); } /* Thread payload for directory listing production. */ -static void read_directory(FileRegistry *registry, DirectoryProvider *provider, - fileid_t fileid, file_t *writer) +static void read_directory(DirectoryProvider *provider, fileid_t fileid, + file_t *writer) { DirectoryAccessor *accessor = provider->accessor(); @@ -85,7 +84,7 @@ /* Close and detach from the registry. */ client_close(writer); - registry->detach(fileid, provider); + provider->registry()->detach(fileid, provider); } @@ -116,7 +115,7 @@ /* Initiate the reading process. */ - std::thread(read_directory, _registry, _provider, fileid, writer).detach(); + std::thread(read_directory, _provider, fileid, writer).detach(); /* Send the capability immediately, discarding it afterwards. */ diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/lib/files/file_pager.cc --- a/libfsserver/lib/files/file_pager.cc Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/lib/files/file_pager.cc Sun Oct 17 22:10:09 2021 +0200 @@ -28,10 +28,9 @@ mapping flags and a file registry. The provider offers a shared page mapper for moderating access to loaded pages. */ -FilePager::FilePager(fileid_t fileid, FileProvider *provider, map_flags_t flags, - FileRegistry *registry) +FilePager::FilePager(fileid_t fileid, FileProvider *provider, map_flags_t flags) : Pager(provider->mapper(), flags), - _registry(registry), _provider(provider), fileid(fileid) + _provider(provider), fileid(fileid) { } @@ -57,7 +56,7 @@ /* Detach the pager, potentially removing the file provider. */ - _registry->detach(fileid, _provider); + _provider->registry()->detach(fileid, _provider); } diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/lib/files/file_provider.cc --- a/libfsserver/lib/files/file_provider.cc Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/lib/files/file_provider.cc Sun Oct 17 22:10:09 2021 +0200 @@ -60,7 +60,7 @@ /* Initialise the pager with the provider and a reference to this object for detaching from the provider. */ - FilePager *pager = new FilePager(_fileid, this, _flags, _registry); + FilePager *pager = new FilePager(_fileid, this, _flags); /* Obtain the size details from the pager, also providing appropriate flags. */ diff -r 5800bd1b5ca5 -r bda5a4ba1e70 libfsserver/lib/generic/provider.cc --- a/libfsserver/lib/generic/provider.cc Sun Oct 17 21:55:37 2021 +0200 +++ b/libfsserver/lib/generic/provider.cc Sun Oct 17 22:10:09 2021 +0200 @@ -32,4 +32,9 @@ { } +FileRegistry *Provider::registry() +{ + return _registry; +} + // vim: tabstop=4 expandtab shiftwidth=4