44// http://www.boost.org/LICENSE_1_0.txt)
55
66#include < memory>
7+ #include < thread>
78#include < boost/network/include/http/server.hpp>
8- #include < boost/thread.hpp>
99#include < sys/mman.h>
1010#include < sys/types.h>
1111#include < sys/stat.h>
@@ -28,7 +28,7 @@ struct file_cache {
2828 std::string doc_root_;
2929 region_map regions;
3030 meta_map file_headers;
31- boost::shared_mutex cache_mutex;
31+ std::mutex cache_mutex;
3232
3333explicit file_cache (std::string doc_root) : doc_root_(std::move(doc_root)) {}
3434
@@ -39,12 +39,12 @@ struct file_cache {
3939 }
4040
4141bool has (std::stringconst &path) {
42- boost::shared_lock<boost::shared_mutex >lock (cache_mutex);
42+ std::unique_lock<std::mutex >lock (cache_mutex);
4343return regions.find (doc_root_ + path) != regions.end ();
4444 }
4545
4646bool add (std::stringconst &path) {
47- boost::upgrade_lock<boost::shared_mutex >lock (cache_mutex);
47+ std::unique_lock<std::mutex >lock (cache_mutex);
4848 std::string real_filename = doc_root_ + path;
4949if (regions.find (real_filename) != regions.end ())return true ;
5050#ifdef O_NOATIME
@@ -60,7 +60,6 @@ struct file_cache {
6060return false ;
6161 }
6262
63- boost::upgrade_to_unique_lock<boost::shared_mutex>unique_lock (lock);
6463 regions.insert (std::make_pair (real_filename,std::make_pair (region, size)));
6564static server::response_header common_headers[] = {
6665 {" Connection" ," close" }, {" Content-Type" ," x-application/octet-stream" },
@@ -73,7 +72,7 @@ struct file_cache {
7372 }
7473
7574 std::pair<void *, std::size_t >get (std::stringconst &path) {
76- boost::shared_lock<boost::shared_mutex >lock (cache_mutex);
75+ std::unique_lock<std::mutex >lock (cache_mutex);
7776 region_map::const_iterator region = regions.find (doc_root_ + path);
7877if (region != regions.end ())
7978return region->second ;
@@ -83,14 +82,12 @@ struct file_cache {
8382
8483 boost::iterator_range<std::vector<server::response_header>::iterator>meta (
8584 std::stringconst &path) {
86- boost::shared_lock<boost::shared_mutex >lock (cache_mutex);
85+ std::unique_lock<std::mutex >lock (cache_mutex);
8786static std::vector<server::response_header> empty_vector;
8887auto headers = file_headers.find (doc_root_ + path);
8988if (headers != file_headers.end ()) {
90- auto begin = headers->second
91- .begin (),
92- end =
93- headers->second .end ();
89+ auto begin = headers->second .begin (),
90+ end = headers->second .end ();
9491return boost::make_iterator_range (begin, end);
9592 }else
9693return boost::make_iterator_range (empty_vector);