Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[package] boost/1.81.0: Apply patch to prevent deadlock in boost::log #17515

Open
christapley opened this issue May 11, 2023 · 0 comments
Open
Labels
bug Something isn't working

Comments

@christapley
Copy link

Description

I would like to submit a patch for boost in order to address boostorg/log#209 in conan's 1.81 recipe.

Package and Environment Details

  • Package Name/Version: boost/1.81.0
  • Operating System+version: Linux RHEL7
  • Compiler+version: GCC 12
  • Conan version: conan 1.59.0
  • Python version: Python 3.7.6

Conan profile

GCC_PATH=/opt/rh/devtoolset-12/root/usr/bin/

[settings]
os=Linux
arch=x86_64
compiler=gcc
compiler.version=12
compiler.libcxx=libstdc++11
build_type=RelWithDebInfo

[env]
PATH=[/opt/rh/devtoolset-12/root/usr/bin/:/opt/cmake-3.25.2/bin]

Steps to reproduce

Wasn't able to upload the sample sorry.

conanfile.py:

from conans import ConanFile, CMake


class BoostLogBugConan(ConanFile):
    name = "boost_log_bug"
    version = "1.0.0"
    license = "<Put the package license here>"
    author = "<Put your name here> <And your email here>"
    url = "<Package recipe repository url here, for issues about the package>"
    description = "<Description of BoostLogBug here>"
    topics = ("<Put some tag here>", "<here>", "<and here>")
    settings = "os", "compiler", "build_type", "arch"
    options = {"shared": [True, False], "fPIC": [True, False]}
    default_options = {"shared": False, "fPIC": True}
    generators = "cmake"
    exports_sources = "src/*"

    def requirements(self):
        self.requires('boost/1.81.0@')

    def config_options(self):
        if self.settings.os == "Windows":
            del self.options.fPIC

    def build(self):
        cmake = CMake(self)
        cmake.configure(source_folder="src")
        cmake.build()

        # Explicit way:
        # self.run('cmake %s/hello %s'
        #          % (self.source_folder, cmake.command_line))
        # self.run("cmake --build . %s" % cmake.build_config)

    def package(self):
        self.copy("*.h", dst="include", src="src")
        self.copy("*.lib", dst="lib", keep_path=False)
        self.copy("*.dll", dst="bin", keep_path=False)
        self.copy("*.dylib*", dst="lib", keep_path=False)
        self.copy("*.so", dst="lib", keep_path=False)
        self.copy("*.a", dst="lib", keep_path=False)

    def package_info(self):
        self.cpp_info.libs = ["boost_log_bug"]

src/CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)
project(boost_log_bug CXX)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

find_package(Boost REQUIRED COMPONENTS log)

add_executable(boost_log_bug boost_log_bug.cpp)

target_link_libraries( boost_log_bug Boost::log )

src/boost_log_bug.cpp:

#include <vector>

#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;
namespace keywords = boost::log::keywords;

void init_logging()
{
    logging::register_simple_formatter_factory<logging::trivial::severity_level, char>("Severity");

    auto file = logging::add_file_log(
        keywords::file_name        = "sample_%N.log",    //
        keywords::target           = "./",               //
        keywords::target_file_name = "sample_%N.log",    //
        keywords::open_mode        = std::ios_base::app, //
        keywords::auto_flush       = true,               //
        keywords::rotation_size    = 500*1024,           //
        keywords::max_size         = 6*1024*1024,        //
        keywords::max_files        = 6,
        keywords::format =
            "%LineID%. [%TimeStamp%][%ThreadID%] [%Severity%] - %Message%");

    file->locked_backend()->scan_for_files();

    logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info);

    logging::add_common_attributes();
}

int main()
{
    init_logging();

    std::vector<char> value(static_cast<size_t>(1024*1024), 'a');
    value.push_back('\0');

    BOOST_LOG_TRIVIAL(info) << value.data();
    BOOST_LOG_TRIVIAL(info) << value.data();
    BOOST_LOG_TRIVIAL(info) << value.data();
    BOOST_LOG_TRIVIAL(info) << value.data();

}

build binary and run it and it will sit in an infinite loop creating empty log files.

Logs

N/A

@christapley christapley added the bug Something isn't working label May 11, 2023
christapley pushed a commit to christapley/conan-center-index that referenced this issue May 11, 2023
christapley added a commit to christapley/conan-center-index that referenced this issue May 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant