Commit Graph

52 Commits (30e7c7f828641aa7bdcc69c74baec6b502fa67a1)

Author SHA1 Message Date
Thomas Winget 84a1d7dbcc clang format....... 4 years ago
Thomas Winget 1e04decb66 can ping on lokinet running in python context! 4 years ago
Jeff Becker d2d109e92c
llarp_time_t is now using std::chrono 4 years ago
Jason Rhinelander f976ebbe49 make format 🤦 4 years ago
Jason Rhinelander 55acec80ec Disable thread annotation when not under libc++
They are fairly useless under stdlibc++ because it doesn't have the
required annotations on stl mutexes and locks, so we just get tons of
useless warnings.
4 years ago
Jason Rhinelander f84ce61d66 Removed empty cpp files
These aren't needed: CMake already knows how to follow #includes and
rebuild when headers change as long as the headers are included
*somewhere*.  The extra .cpp files here just require building a bunch of
.cpp files with just header content that we just end up throw away
during linking (since the same things will also be compiled in whatever
other compilation units include the same headers).
4 years ago
Jason Rhinelander b4440094b0 De-abseil, part 2: mutex, locks, (most) time
- util::Mutex is now a std::shared_timed_mutex, which is capable of
  exclusive and shared locks.

- util::Lock is still present as a std::lock_guard<util::Mutex>.

- the locking annotations are preserved, but updated to the latest
  supported by clang rather than using abseil's older/deprecated ones.

- ACQUIRE_LOCK macro is gone since we don't pass mutexes by pointer into
  locks anymore (WTF abseil).

- ReleasableLock is gone.  Instead there are now some llarp::util helper
  methods to obtain unique and/or shared locks:
    - `auto lock = util::unique_lock(mutex);` gets an RAII-but-also
      unlockable object (std::unique_lock<T>, with T inferred from
      `mutex`).
    - `auto lock = util::shared_lock(mutex);` gets an RAII shared (i.e.
      "reader") lock of the mutex.
    - `auto lock = util::unique_locks(mutex1, mutex2, mutex3);` can be
      used to atomically lock multiple mutexes at once (returning a
      tuple of the locks).
  This are templated on the mutex which makes them a bit more flexible
  than using a concrete type: they can be used for any type of lockable
  mutex, not only util::Mutex.  (Some of the code here uses them for
  getting locks around a std::mutex).  Until C++17, using the RAII types
  is painfully verbose:

  ```C++
  // pre-C++17 - needing to figure out the mutex type here is annoying:
  std::unique_lock<util::Mutex> lock(mutex);
  // pre-C++17 and even more verbose (but at least the type isn't needed):
  std::unique_lock<decltype(mutex)> lock(mutex);
  // our compromise:
  auto lock = util::unique_lock(mutex);
  // C++17:
  std::unique_lock lock(mutex);
  ```

  All of these functions will also warn (under gcc or clang) if you
  discard the return value.  You can also do fancy things like
  `auto l = util::unique_lock(mutex, std::adopt_lock)` (which lets a
  lock take over an already-locked mutex).

- metrics code is gone, which also removes a big pile of code that was
  only used by metrics:
  - llarp::util::Scheduler
  - llarp:🧵:TimerQueue
  - llarp::util::Stopwatch
4 years ago
Jason Rhinelander ac1486d0be Replace absl::optional with optional-lite
Step 1 of removing abseil from lokinet.

For the most part this is a drop-in replacement, but there are also a
few changes here to the JSONRPC layer that were needed to work around
current gcc 10 dev snapshot:

- JSONRPC returns a json now instead of an optional<json>.  It doesn't
  make any sense to have a json rpc call that just closes the connection
  with returning anything.  Invoked functions can return a null (default
  constructed) result now if they don't have anything to return (such a
  null value won't be added as "result").
4 years ago
Jeff Becker 16c7e7dd33 fix unit tests 5 years ago
Thomas Winget f4c9e09d44 remove obsolete timer-related code 5 years ago
Thomas Winget 71bb0dd520 implement timers using libuv
So far only a bit of the code using timers has been modified to use
the new libuv-based timers.  Also only the non-Windows case has been
implemented.  Seems to be working though, so it's a good time to commit.
5 years ago
Jeff Becker 8455d5d1cf more cleanup 5 years ago
Jeff Becker b286230d40 limit timer calls 5 years ago
Jeff Becker 35672e6d8c call timers with queuer if set 5 years ago
Jeff Becker cec36b62b5 make logic and net thread one in the same 5 years ago
Jeff Becker c9d38d421b clang fixes 5 years ago
Jeff Becker c5f198cfa1
disable absl decorator in release 5 years ago
Jeff Becker 2eabe98d9b
add systemd watchdog if enabled on compile time 5 years ago
Jeff Becker 8ceb20452a
add absl annotations 5 years ago
Jeff Becker fe6783eef6
squash possible race condition 5 years ago
Jeff Becker 7d5fd132c8
make format 5 years ago
Jeff Becker 3c85691f81 limit calls to pumpll such that it gets called fast enough but not too much under load 5 years ago
Jason Rhinelander 740460318a Die if job queue full
If this happens it's a pretty serious error; if someone is hitting it
occassionally it's better to know and update their queue size (and if it
is a runaway situation lokinet doesn't come back anyway).
5 years ago
Jeff Becker fba1e47d1c call jobs in logic 5 years ago
Thomas Winget 6d506302dc Show number of logic thread jobs in debug builds 5 years ago
Jeff Becker a3a62c34f3 use timer guard for all jobs in debug mode 5 years ago
Jeff Becker af663d8b10 prune members in timer context 5 years ago
Jeff Becker 11d4760c3d add metrics tracking for logic jobs in debug mode 5 years ago
Jeff Becker dd48b149ca
make job queue size configurable 5 years ago
Jeff Becker 853108ce6e
make logic job queue 8 times bigger 5 years ago
Jeff Becker d44d034775
make contention checker templated 5 years ago
Jeff Becker 1188763ece
typo fix in release 5 years ago
Jeff Becker 56dce90de9
add trace log level for tracking logic thread jobs 5 years ago
Jeff Becker eb6d042e73
make sure all calls of logic thread jobs are not having contention 5 years ago
Jeff Becker d7f09a365d
contention killer 5 years ago
Jason Rhinelander d96d33329b
Merge pull request #912 from majestrate/logic-thread-fix-2019-11-13
fix logic thread behavior
5 years ago
Stephen Shelton 46fe64c2e6 make format (and git commit --amend to re-trigger CI) 5 years ago
Jeff Becker 168d25f244
add warning when trying to queue onto full logic thread 5 years ago
Jeff Becker f16c9f9b5d
iot seems that logic thread didn't work the way i remember it should
make logic work the way it should
5 years ago
Jeff Becker 3c8e148372
prevent double free crap with shared_ptr 5 years ago
Stephen Shelton a3c48e22f3
Even more clarity to NullMutex comments 5 years ago
Stephen Shelton 36ef0954ec Add comments to NullMutex implementation to express intent 5 years ago
jeff 605da68e15 use absl optional 5 years ago
jeff da9437d0cf don't need that 5 years ago
Jeff Becker 327c545530
finish multithread cryptography first pass 5 years ago
jeff 14c9ef15ed try calling stuff in logic thread from event loop 5 years ago
jeff ac2a2aed1d gut libutp and finish making things compile and pass tests 5 years ago
Jeff Becker e3bb59707e
more 5 years ago
Jeff Becker ab64c0d013
Merge remote-tracking branch 'micheal/abort_mutex' 5 years ago
Jeff Becker 1adae338ce
Merge remote-tracking branch 'origin/master' 5 years ago