bolt_decoder bug fix based on warning from clang-tidy (steps to run clang-tidy: 1. cmake ... 2. make clang-tidy). TODO: fix remaining issues
This commit is contained in:
parent
ae28cdc424
commit
a2d9ab7231
@ -90,7 +90,7 @@ std::string BoltDecoder::read_string()
|
||||
size = marker & 0x0F;
|
||||
}
|
||||
// if the marker is 0xD0, size is an 8-bit unsigned integer
|
||||
if (marker == pack::String8) {
|
||||
else if (marker == pack::String8) {
|
||||
size = read_byte();
|
||||
}
|
||||
// if the marker is 0xD1, size is a 16-bit big-endian unsigned integer
|
||||
|
@ -1,15 +1,19 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
#include <signal.h>
|
||||
|
||||
#include "debug/log.hpp"
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include "http/request.hpp"
|
||||
#include "http/response.hpp"
|
||||
|
||||
#include "socket.hpp"
|
||||
#include "http/worker.hpp"
|
||||
#include "socket.hpp"
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define LOG_DEBUG(x) std::cout << x << std::endl;
|
||||
#else
|
||||
#define LOG_DEBUG(x)
|
||||
#endif
|
||||
|
||||
std::hash<std::thread::id> hash;
|
||||
|
||||
@ -18,12 +22,9 @@ constexpr unsigned K = 128;
|
||||
std::array<http::Parser<http::Request, http::Response>, K> workers;
|
||||
std::array<std::thread, K> threads;
|
||||
|
||||
std::atomic<bool> alive { true };
|
||||
std::atomic<bool> alive{true};
|
||||
|
||||
void exiting()
|
||||
{
|
||||
LOG_DEBUG("Exiting...");
|
||||
}
|
||||
void exiting() { LOG_DEBUG("Exiting..."); }
|
||||
|
||||
void sigint_handler(int)
|
||||
{
|
||||
@ -36,15 +37,15 @@ void sigint_handler(int)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
//std::atexit(exiting);
|
||||
// std::atexit(exiting);
|
||||
signal(SIGINT, sigint_handler);
|
||||
|
||||
for(size_t i = 0; i < workers.size(); ++i)
|
||||
for (size_t i = 0; i < workers.size(); ++i)
|
||||
{
|
||||
auto& w = workers[i];
|
||||
auto &w = workers[i];
|
||||
|
||||
threads[i] = std::thread([i, &w]() {
|
||||
while(alive)
|
||||
while (alive)
|
||||
{
|
||||
LOG_DEBUG("waiting for events on thread " << i);
|
||||
w.wait_and_process_events();
|
||||
@ -69,71 +70,70 @@ int main(void)
|
||||
socket.set_non_blocking();
|
||||
socket.listen(1024);
|
||||
|
||||
int efd, s;
|
||||
struct epoll_event event;
|
||||
struct epoll_event *events;
|
||||
int efd, s;
|
||||
struct epoll_event event;
|
||||
struct epoll_event *events;
|
||||
|
||||
efd = epoll_create1 (0);
|
||||
if (efd == -1)
|
||||
efd = epoll_create1(0);
|
||||
if (efd == -1)
|
||||
{
|
||||
perror ("epoll_create");
|
||||
abort ();
|
||||
perror("epoll_create");
|
||||
abort();
|
||||
}
|
||||
|
||||
event.data.fd = socket;
|
||||
event.events = EPOLLIN | EPOLLET;
|
||||
s = epoll_ctl (efd, EPOLL_CTL_ADD, socket, &event);
|
||||
if (s == -1)
|
||||
event.data.fd = socket;
|
||||
event.events = EPOLLIN | EPOLLET;
|
||||
s = epoll_ctl(efd, EPOLL_CTL_ADD, socket, &event);
|
||||
if (s == -1)
|
||||
{
|
||||
perror ("epoll_ctl");
|
||||
abort ();
|
||||
perror("epoll_ctl");
|
||||
abort();
|
||||
}
|
||||
|
||||
/* Buffer where events are returned */
|
||||
events = static_cast<struct epoll_event*>(calloc (MAXEVENTS, sizeof event));
|
||||
/* Buffer where events are returned */
|
||||
events = static_cast<struct epoll_event *>(calloc(MAXEVENTS, sizeof event));
|
||||
|
||||
/* The event loop */
|
||||
while (1)
|
||||
/* The event loop */
|
||||
while (1)
|
||||
{
|
||||
int n, i;
|
||||
int n, i;
|
||||
|
||||
LOG_DEBUG("acceptor waiting for events");
|
||||
n = epoll_wait (efd, events, MAXEVENTS, -1);
|
||||
LOG_DEBUG("acceptor waiting for events");
|
||||
n = epoll_wait(efd, events, MAXEVENTS, -1);
|
||||
|
||||
LOG_DEBUG("acceptor recieved " << n << " connection requests");
|
||||
LOG_DEBUG("acceptor recieved " << n << " connection requests");
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
if ((events[i].events & EPOLLERR) ||
|
||||
(events[i].events & EPOLLHUP) ||
|
||||
(!(events[i].events & EPOLLIN)))
|
||||
{
|
||||
/* An error has occured on this fd, or the socket is not
|
||||
ready for reading (why were we notified then?) */
|
||||
fprintf (stderr, "epoll error\n");
|
||||
close (events[i].data.fd);
|
||||
continue;
|
||||
}
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
if ((events[i].events & EPOLLERR) ||
|
||||
(events[i].events & EPOLLHUP) ||
|
||||
(!(events[i].events & EPOLLIN)))
|
||||
{
|
||||
/* An error has occured on this fd, or the socket is not
|
||||
ready for reading (why were we notified then?) */
|
||||
fprintf(stderr, "epoll error\n");
|
||||
close(events[i].data.fd);
|
||||
continue;
|
||||
}
|
||||
|
||||
else if (socket == events[i].data.fd)
|
||||
{
|
||||
/* We have a notification on the listening socket, which
|
||||
means one or more incoming connections. */
|
||||
while (true)
|
||||
{
|
||||
LOG_DEBUG("trying to accept connection on thread " << idx);
|
||||
if(!workers[idx].accept(socket))
|
||||
break;
|
||||
else if (socket == events[i].data.fd)
|
||||
{
|
||||
/* We have a notification on the listening socket, which
|
||||
means one or more incoming connections. */
|
||||
while (true)
|
||||
{
|
||||
LOG_DEBUG("trying to accept connection on thread " << idx);
|
||||
if (!workers[idx].accept(socket)) break;
|
||||
|
||||
LOG_DEBUG("Accepted a new connection on thread " << idx);
|
||||
idx = (idx + 1) % workers.size();
|
||||
break;
|
||||
}
|
||||
LOG_DEBUG("Accepted a new connection on thread " << idx);
|
||||
idx = (idx + 1) % workers.size();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free (events);
|
||||
free(events);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user