Conky: "conky" received signal SIGPIPE, Broken pipe.

Created on 1 Jan 2018  路  20Comments  路  Source: brndnmtthws/conky

I've attempted to debug issue #421 so I've built debug version of conky and tried to reproduce the crash. Conky crashed after 5-20 minutes after start but only when used with RSS feed. I launched conky with gdb, it crashed and gdb returned me following message:

Thread 11 "conky" received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7fffcb7fe700 (LWP 17805)]
0x00007ffff7bca8bb in write () from /usr/lib/libpthread.so.0
(gdb) where
#0  0x00007ffff7bca8bb in write () from /usr/lib/libpthread.so.0
#1  0x00007ffff2bbc3f7 in ?? () from /usr/lib/libcrypto.so.1.1
#2  0x00007ffff2bb6f15 in BIO_write () from /usr/lib/libcrypto.so.1.1
#3  0x00007ffff2fb557e in ?? () from /usr/lib/libssl.so.1.1
#4  0x00007ffff2fb581c in ?? () from /usr/lib/libssl.so.1.1
#5  0x00007ffff2fbe462 in ?? () from /usr/lib/libssl.so.1.1
#6  0x00007ffff2fbc806 in ?? () from /usr/lib/libssl.so.1.1
#7  0x00007ffff2fc6e90 in SSL_shutdown () from /usr/lib/libssl.so.1.1
#8  0x00007ffff5bbec26 in ?? () from /usr/lib/libcurl.so.4
#9  0x00007ffff5bbec91 in ?? () from /usr/lib/libcurl.so.4
#10 0x00007ffff5b7d5c6 in ?? () from /usr/lib/libcurl.so.4
#11 0x00007ffff5b90bdb in ?? () from /usr/lib/libcurl.so.4
#12 0x00007ffff5b9331b in ?? () from /usr/lib/libcurl.so.4
#13 0x00007ffff5b947a4 in curl_multi_perform () from /usr/lib/libcurl.so.4
#14 0x00007ffff5b8a509 in curl_easy_perform () from /usr/lib/libcurl.so.4
#15 0x000055555564efb0 in priv::curl_internal::do_work (this=0x55555596c788)
    at /home/madejspace/conky/src/ccurl_thread.cc:124
#16 0x000055555565161f in curl_callback<std::shared_ptr<PRSS>>::work() (
    this=0x55555596c6e0) at /home/madejspace/conky/src/ccurl_thread.h:69
#17 0x0000555555626229 in conky::priv::callback_base::start_routine (
    this=0x55555596c6e0) at /home/madejspace/conky/src/update-cb.cc:129
#18 0x0000555555626f39 in std::__invoke_impl<void, void (conky::priv::callback_base::*)(), conky::priv::callback_base*> (::callback_base::*)(conky::priv::callback_base * const)) 0x5555556261d4 <conky::priv::callback_base::start_routine()>, __t=@0x555555962f08: 0x55555596c6e0)
    at /usr/include/c++/7.2.1/bits/invoke.h:73
#19 0x0000555555626993 in std::__invoke<void (conky::priv::callback_base::*)(), conky::priv::callback_base*> (
    __fn=@0x555555962f10: (void (conky::priv::callback_base::*)(conky::priv::callback_base * const)) 0x5555556261d4 <conky::priv::callback_base::start_routine()>, __args#0=@0x555555962f08: 0x55555596c6e0)
    at /usr/include/c++/7.2.1/bits/invoke.h:95
#20 0x00005555556291af in std::thread::_Invoker<std::tuple<void (conky::priv::callback_base::*)(), conky::priv::callback_base*> >::_M_invoke<0ul, 1ul> (this=0x555555962f08) at /usr/include/c++/7.2.1/thread:234
#21 0x0000555555629150 in std::thread::_Invoker<std::tuple<void (conky::priv::callback_base::*)(), conky::priv::callback_base*> >::operator() (this=0x555555962f08) at /usr/include/c++/7.2.1/thread:243
#22 0x0000555555629120 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (conky::priv::callback_base::*)(), conky::priv::callback_base*> > >::_M_run (this=0x555555962f00)
    at /usr/include/c++/7.2.1/thread:186
#23 0x00007ffff5328a6f in std::execute_native_thread_routine (__p=0x555555962f00)
    at /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:83
#24 0x00007ffff7bc108a in start_thread () from /usr/lib/libpthread.so.0
#25 0x00007ffff4d9642f in clone () from /usr/lib/libc.so.6

Configuration of conky

-- vim: ts=4 sw=4 noet ai cindent syntax=lua
--[[
Conky, a system monitor, based on torsmo

Any original torsmo code is licensed under the BSD license

All code written since the fork of torsmo is licensed under the GPL

Please see COPYING for details

Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
Copyright (c) 2005-2012 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)
All rights reserved.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
]]

conky.config = {
    alignment = 'top_right',
    background = false,
    border_width = 1,
    cpu_avg_samples = 2,
    default_color = 'white',
    default_outline_color = 'white',
    default_shade_color = 'white',
    draw_borders = false,
    draw_graph_borders = true,
    draw_outline = false,
    draw_shades = false,
    use_xft = false,
    font = 'Misc Fixed Semicondensed:size=13',
    gap_x = 0,
    gap_y = 0,
    minimum_height = 5,
    minimum_width = 5,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    own_window_transparent = true,
    stippled_borders = 0,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    show_graph_scale = false,
    show_graph_range = false
}

conky.text = [[
$nodename - $sysname $kernel on $machine
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in MHz):$color $freq
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
${color grey}ACPI Battery:$color $battery_percent% ($battery_time) ${battery_bar 4}
${color grey}Temperature:$color $acpitemp掳C ${execbar expr $(cat /sys/bus/platform/devices/thinkpad_hwmon/hwmon/hwmon0/temp1_input) / 1000}
${color grey}Fan speed:$color ${platform thinkpad_hwmon/hwmon/hwmon0 fan 1} rpm ${execbar echo "scale = 2; ( $(cat /sys/bus/platform/devices/thinkpad_hwmon/hwmon/hwmon0/fan1_input) / 5000 ) * 100" | bc | awk '{match($1,"^([0-9])\.",a)}END{print a[0]}'}
${color grey}Processes:$color $processes  ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
 / $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed wlp3s0} ${color grey} - Down:$color ${downspeed wlp3s0}
${upspeedgraph wlp3s0 10 00ff00 0000ff}
${downspeedgraph wlp3s0 10 ff0000 0000ff}
${color grey}IP: $color${addr wlp3s0}
${color grey}SSID: $color${wireless_essid wlp3s0}
${color grey}Bitrate: $color${wireless_bitrate wlp3s0}
$hr
${color grey}Name              PID   CPU%   MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
$hr
${color grey}Z3S
$color${rss https://zaufanatrzeciastrona.pl/feed/ 15 item_titles 10}
${color grey}$hr
Wykop.pl
$color${rss https://www.wykop.pl/rss/index.xml/ 15 item_titles 10}
]]

Most helpful comment

Well done sir @lasers. I need to take mine for a walk to :hankey: too.

All 20 comments

Try adding
text_buffer_size = 1024,
in your conky.config

@dbriba thank you for your comment and proposal to fix this issue, this didn't help however. Conky still crashes, this happens only with ${rss} loaded in text config.

I attempted to set the text_buffer_size to 1024, and run conky without gdb, with gdb and built debug version of conky from GitHub.

These are the results:

  • Output without gdb
conky: desktop window (1da) is root window
conky: window type - desktop
conky: drawing to created window (0x1c00001)
conky: can't load font 'Misc Fixed Semicondensed:size=13'
conky: can't load font 'Misc Fixed Semicondensed:size=13'
*** Error in `conky': corrupted size vs. prev_size: 0x0000555f94336770 ***
[1]    2359 abort (core dumped)  conky
  • Output with gdb
(gdb) run
Starting program: /usr/bin/conky 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
conky: desktop window (1da) is root window
conky: window type - desktop
conky: drawing to created window (0x2200001)
conky: can't load font 'Misc Fixed Semicondensed:size=13'
conky: can't load font 'Misc Fixed Semicondensed:size=13'
[New Thread 0x7fffec745700 (LWP 2417)]
[New Thread 0x7fffebf44700 (LWP 2418)]
[New Thread 0x7fffeb743700 (LWP 2419)]
[New Thread 0x7fffeaf42700 (LWP 2420)]
[New Thread 0x7fffea741700 (LWP 2421)]
[New Thread 0x7fffe9f40700 (LWP 2422)]
[New Thread 0x7fffe973f700 (LWP 2423)]
[New Thread 0x7fffe8f3e700 (LWP 2424)]
[New Thread 0x7fffcbfff700 (LWP 2425)]
[New Thread 0x7fffcb7fe700 (LWP 2426)]
[New Thread 0x7fffcaffd700 (LWP 2427)]
[New Thread 0x7fffca7fc700 (LWP 2428)]
[Thread 0x7fffcaffd700 (LWP 2427) exited]
[Thread 0x7fffca7fc700 (LWP 2428) exited]

Thread 1 "conky" received signal SIGSEGV, Segmentation fault.
0x00007ffff4c4c0a3 in malloc_consolidate () from /usr/lib/libc.so.6
  • Output with gdb (debug build made from commit 262a292 )
(gdb) run
Starting program: /home/mwht/conky/build/src/conky 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
conky: desktop window (1da) is root window
conky: window type - desktop
conky: drawing to created window (0x1e00001)
conky: can't load font 'Misc Fixed Semicondensed:size=13'
conky: can't load font 'Misc Fixed Semicondensed:size=13'
[New Thread 0x7fffee668700 (LWP 3484)]
[New Thread 0x7fffede67700 (LWP 3485)]
[New Thread 0x7fffed666700 (LWP 3486)]
[New Thread 0x7fffece65700 (LWP 3487)]
[New Thread 0x7fffdffff700 (LWP 3488)]
[New Thread 0x7fffdf7fe700 (LWP 3489)]
[New Thread 0x7fffdeffd700 (LWP 3490)]
[New Thread 0x7fffde7fc700 (LWP 3491)]
[New Thread 0x7fffddffb700 (LWP 3492)]
[New Thread 0x7fffdd7fa700 (LWP 3493)]
[New Thread 0x7fffbffff700 (LWP 3495)]
[New Thread 0x7fffdcff9700 (LWP 3494)]
[Thread 0x7fffdcff9700 (LWP 3494) exited]
[Thread 0x7fffbffff700 (LWP 3495) exited]
[New Thread 0x7fffbffff700 (LWP 3512)]
[Thread 0x7fffbffff700 (LWP 3512) exited]
[New Thread 0x7fffbffff700 (LWP 3525)]
[Thread 0x7fffbffff700 (LWP 3525) exited]
[New Thread 0x7fffbffff700 (LWP 3586)]
[Thread 0x7fffbffff700 (LWP 3586) exited]
[New Thread 0x7fffbffff700 (LWP 3599)]
[Thread 0x7fffbffff700 (LWP 3599) exited]
[New Thread 0x7fffbffff700 (LWP 3628)]
[Thread 0x7fffbffff700 (LWP 3628) exited]
[New Thread 0x7fffbffff700 (LWP 3678)]
[Thread 0x7fffbffff700 (LWP 3678) exited]
[New Thread 0x7fffbffff700 (LWP 3771)]
[Thread 0x7fffbffff700 (LWP 3771) exited]
[New Thread 0x7fffbffff700 (LWP 3782)]
[Thread 0x7fffbffff700 (LWP 3782) exited]
[New Thread 0x7fffbffff700 (LWP 3981)]
[Thread 0x7fffbffff700 (LWP 3981) exited]
[New Thread 0x7fffbffff700 (LWP 4000)]
[Thread 0x7fffbffff700 (LWP 4000) exited]
[New Thread 0x7fffbffff700 (LWP 4041)]
[Thread 0x7fffbffff700 (LWP 4041) exited]

Thread 10 "conky" received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7fffddffb700 (LWP 3492)]
0x00007ffff7bca8bb in write () from /usr/lib/libpthread.so.0

This work for me
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
--[[
Conky, a system monitor, based on torsmo

Any original torsmo code is licensed under the BSD license

All code written since the fork of torsmo is licensed under the GPL

Please see COPYING for details

Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
Copyright (c) 2005-2012 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)
All rights reserved.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
]]

conky.config = {
alignment = 'top_right',
background = false,
border_width = 1,
cpu_avg_samples = 2,
default_color = 'white',
default_outline_color = 'white',
default_shade_color = 'white',
draw_borders = false,
draw_graph_borders = true,
draw_outline = false,
draw_shades = false,
use_xft = false,
font = 'Misc Fixed Semicondensed:size=13',
gap_x = 0,
gap_y = 0,
minimum_height = 5,
minimum_width = 5,
net_avg_samples = 2,
no_buffers = true,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
own_window = true,
own_window_class = 'Conky',
own_window_type = 'desktop',
own_window_argb_visual = true,
own_window_transparent = true,
stippled_borders = 0,
update_interval = 1.0,
uppercase = false,
use_spacer = 'none',
show_graph_scale = false,
show_graph_range = false,
}

conky.text = [[
$nodename - $sysname $kernel on $machine
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in MHz):$color $freq
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
${color grey}ACPI Battery:$color $battery_percent% ($battery_time) ${battery_bar 4}
${color grey}Temperature:$color $acpitemp掳C ${execbar expr $(cat /sys/bus/platform/devices/thinkpad_hwmon/hwmon/hwmon0/temp1_input) / 1000}
${color grey}Fan speed:$color ${platform thinkpad_hwmon/hwmon/hwmon0 fan 1} rpm ${execbar echo "scale = 2; ( $(cat /sys/bus/platform/devices/thinkpad_hwmon/hwmon/hwmon0/fan1_input) / 5000 ) * 100" | bc | awk '{match($1,"^([0-9]).",a)}END{print a[0]}'}
${color grey}Processes:$color $processes ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
/ $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed wlp3s0} ${color grey} - Down:$color ${downspeed wlp3s0}
${upspeedgraph wlp3s0 10 00ff00 0000ff}
${downspeedgraph wlp3s0 10 ff0000 0000ff}
${color grey}IP: $color${addr wlp3s0}
${color grey}SSID: $color${wireless_essid wlp3s0}
${color grey}Bitrate: $color${wireless_bitrate wlp3s0}
$hr
${color grey}Name PID CPU% MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
$hr
${color grey}Z3S
$color${rss https://zaufanatrzeciastrona.pl/feed/ 15 item_titles 10}
${color grey}$hr
Wykop.pl
$color${rss https://www.wykop.pl/rss/index.xml/ 15 item_titles 10}
]]

I just add
own_window_argb_visual = true,
after
own_window_type = 'desktop',

@dbriba I've attepmted to update my configuration file again, gives the same result as output without gdb however. Changing window appearance settings doesn't seem to fix the crash.

Ok, but I don't know why.
I can see that in your report:
conky: can't load font 'Misc Fixed Semicondensed:size=13'

I think you get this conky on other site and don't adapt this on your configuration.

For example I see:
.................... ${platform thinkpad_hwmon/hwmon/hwmon0 fan 1} .............

Have you a thinkpad ?

Yes, I own Lenovo ThinkPad T410 and these lines are responsible for getting the readouts of fan speed. I wrote my configuration file using example config file. All thinkpad-related stuff is done from scratch, manually.

I ran your config after slight changes, and it ran fine on Arch Linux, conky v1.10.6_pre

I used xft, and double_buffer, otherwise it draws a corrupted output, and flickers.

use_xft = true,
double_buffer = true,

No issues so far after running it for over two hours.

Hi @mwht, can you give us an update? Where do we stand today? Does it still crash for you on v1.10.8 or v1.10.9_pre? If you are able to reproduce this crash, please run (gdb) bt full instead of (gdb) where. Thank you.

@su8 Anything good from gdb? I have been running this config...

conky.config = {out_to_console=true,out_to_x=false}
conky.text = [[
${rss https://zaufanatrzeciastrona.pl/feed/ 15 item_titles 10}
${rss https://www.wykop.pl/rss/index.xml/ 15 item_titles 10}
----------------
]]

I took the dog out for a morning :hankey: too. No crash whatsoever.

Well done sir @lasers. I need to take mine for a walk to :hankey: too.

Is it a libcurl issue in first place? See #372. OP filed issue Jan 1. PR for eve merged Jan 19.

$ grep -RI easy_perform

./src/eve.cc:185:  curl_easy_perform(curl_handle);
./src/ccurl_thread.cc:120:  res = curl_easy_perform(curl);
./src/common.cc:778:  res = curl_easy_perform(curl);

```c
$ grep -RI do_work

./src/ccurl_thread.cc:97:void curl_internal::do_work() {
./src/ccurl_thread.h:46: void do_work();
./src/ccurl_thread.h:48: // called by do_work() after downloading data from the uri
./src/ccurl_thread.h:72: do_work();

The following was taken from https://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-properly

I have a small server program that accepts connections on a TCP or local UNIX socket, reads a simple command and, depending on the command, sends a reply. The problem is that the client may have no interest in the answer sometimes and exits early, so writing to that socket will cause a SIGPIPE and make my server crash. What's the best practice to prevent the crash here? Is there a way to check if the other side of the line is still reading? (select() doesn't seem to work here as it always says the socket is writable). Or should I just catch the SIGPIPE with a handler and ignore it?

https://sourceforge.net/p/curl/bugs/1180/

$ curl --limit-rate 250k -L http://github.com/raspberrypi/firmware/archive/4ade27942e.tar.gz > /dev/null
This command redirects to a HTTPS site and then to a second site that it downloads from. When after the (5+ minutes) download the initial HTTPS connection is to be shut down, the OpenSSL calls used will attempt an SSL shutdown but the server has already closed the connection and this triggers a SIGPIPE.

The issue was in libcurl and they have long patched it.

edit: here's a exact gdb trace

https://stackoverflow.com/questions/32040760/c-openssl-sigpipe-when-writing-in-closed-pipe

edit: In this thread they talk about CURLOPT_NOSIGNAL, 1L which conky uses

https://github.com/brndnmtthws/conky/blob/84f136f84af8ae089aaf7d61af70405781379e2f/src/ccurl_thread.cc#L91-L94

Fixed in 7.32.0 - August 12 2013 - https://curl.haxx.se/changes.html#7_32_0

  • SIGPIPE: ignored while inside the library

Fixed in 7.34.0 - December 17 2013 - https://curl.haxx.se/changes.html#7_34_0

  • curl_multi_cleanup: ignore SIGPIPE
  • sigpipe: factor out sigpipe_reset from easy.c

Fixed in 7.36.0 - March 26 2014 - https://curl.haxx.se/changes.html#7_36_0

  • multi: ignore SIGPIPE internally

Fixed in 7.37.0 - May 21 2014 - https://curl.haxx.se/changes.html#7_37_0

  • curl_multi_cleanup: ignore SIGPIPE better

We're in 2018 though. It has been more than 5 years later since that bug. Whatever, my rss conky have been running all this time... more than two hours in... and still no crash. Good enough. :+1:

Is this happening again? My conky crashes every 30 or 60 minutes, when it tries to download weather data. strace shows that it receives a SIGPIPE during writing to the socket that was connected to the weather data server.

I'm on Gentoo, conky 1.10.8, curl 7.64.

Not again. OP never said anything. It looks like @su8 and I didn't have issues testing this on latest master (was v1.10.9_pre). I'm sure we didn't test this on 1.10.8. Too much changes to bother with bisecting.

Also, Conky 1.11.3 came out last week. Can you try the latest master or release?

Somehow Gentoo is still stuck on 1.10.8. I'll try 1.11.3 and let you know what happens (it will take a few hours to make sure everything is okay if it doesn't crash, though).

@lasers Looks like I won't be able to for now, I'm stuck on Lua 5.1, and 1.11.3 requires at least Lua 5.2, or even 5.3, from what I see. I've tried to update it, but it seems that would be quite a lot of work, so I guess I'll just put up with crashes until Gentoo maintainers update a few packages ;)

@fizyk20 @lasers sorry for quite late response, I have never tested this since, I'm quite surprised this is issue even after a year 馃 (or 6 years)
I found workaround by writing simple Python script which gets these values for me and having conky display it's output using ${exec}.

I haven't been using conky for some time, but I can pull latest revision from git, build it and test it with changes suggested by everyone commenting on this issue.

I ran config by @lasers for about 1 hour using conky built from 4b9e5163 - it worked perfectly.
@fizyk20 try pulling latest revision and building it.

Conky 1.11.5 and 1.11.7 16be0e1, same problem, same backtrace :(

The only difference is that I use ${curl}, not rss. Should I open a new issue?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

txtsd picture txtsd  路  4Comments

akorop picture akorop  路  3Comments

oberon-manjaro picture oberon-manjaro  路  4Comments

fonic picture fonic  路  3Comments

Microcrap picture Microcrap  路  4Comments