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

download stuck not updating any feeds #1276

Open
rich-coe opened this issue Aug 1, 2023 · 29 comments
Open

download stuck not updating any feeds #1276

rich-coe opened this issue Aug 1, 2023 · 29 comments

Comments

@rich-coe
Copy link
Contributor

rich-coe commented Aug 1, 2023

updated/pulled up to master 3acb5bc to pick up new glib/webkit changes

RSS feed updates hang with all requests in the 'Pending Queue'.
I tried --debug-net but observed no obvious messages.

During debugging, numberOfActiveJobs = 1, but nothing is obviously stuck.
Looking into debugging/tracing glib queue processing.

thr apply all bt

Thread 499 (Thread 0x7f1942b286c0 (LWP 15223) "ReceiveQueue"):
#0  0x00007f194823320e in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7f1942b27a40, op=393, expected=0, futex_word=0x7f192400e994) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=futex_word@entry=0x7f192400e994, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7f1942b27a40, private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87
#2  0x00007f19482332af in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7f192400e994, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7f1942b27a40, private=private@entry=0) at futex-internal.c:139
#3  0x00007f1948236275 in __pthread_cond_wait_common (abstime=0x7f1942b27a40, clockid=0, mutex=0x7f192400e940, cond=0x7f192400e968) at pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7f192400e968, mutex=0x7f192400e940, abstime=0x7f1942b27a40) at pthread_cond_wait.c:643
#5  0x00007f194a54da8b in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#6  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#7  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 12 (Thread 0x7f18deaf46c0 (LWP 1333) "ReceiveQueue"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f18c8006e60, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eb04f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007f194a4eb570 in WTF::RunLoop::run() () at /lib64/libjavascriptcoregtk-4.1.so.0
#4  0x00007f194a4ed0ae in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 11 (Thread 0x7f18dcefd6c0 (LWP 1265) "threaded-ml"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f18bc0071a0, nfds=3, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f18df264e31 in  () at /lib64/libpulse.so.0
#2  0x00007f18df24e854 in pa_mainloop_poll () at /lib64/libpulse.so.0
#3  0x00007f18df2590d6 in pa_mainloop_iterate () at /lib64/libpulse.so.0
#4  0x00007f18df259180 in pa_mainloop_run () at /lib64/libpulse.so.0
#5  0x00007f18df268dd9 in  () at /lib64/libpulse.so.0
#6  0x00007f18df20723f in  () at /usr/lib64/pulseaudio/libpulsecommon-16.1.so
#7  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#8  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 10 (Thread 0x7f18dfffd6c0 (LWP 1256) "ReceiveQueue"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f18cc001170, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eb04f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007f194a4eb570 in WTF::RunLoop::run() () at /lib64/libjavascriptcoregtk-4.1.so.0
#4  0x00007f194a4ed0ae in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 9 (Thread 0x7f19423276c0 (LWP 1255) "ReceiveQueue"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f1930002dd0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eb04f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007f194a4eb570 in WTF::RunLoop::run() () at /lib64/libjavascriptcoregtk-4.1.so.0
#4  0x00007f194a4ed0ae in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 8 (Thread 0x7f1940b246c0 (LWP 1213) "ebsiteDataStore"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f18d0001000, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eb04f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007f194a4eb570 in WTF::RunLoop::run() () at /lib64/libjavascriptcoregtk-4.1.so.0
#4  0x00007f194a4ed0ae in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 7 (Thread 0x7f19413256c0 (LWP 1212) "HashSaltStorage"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f18d8001000, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eb04f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007f194a4eb570 in WTF::RunLoop::run() () at /lib64/libjavascriptcoregtk-4.1.so.0
#4  0x00007f194a4ed0ae in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 6 (Thread 0x7f1941b266c0 (LWP 1211) "PressureMonitor"):
#0  0x00007f194823320e in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7f1941b25640, op=393, expected=0, futex_word=0x7f192204c160) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=futex_word@entry=0x7f192204c160, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7f1941b25640, private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87
#2  0x00007f19482332af in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7f192204c160, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7f1941b25640, private=private@entry=0) at futex-internal.c:139
#3  0x00007f1948236275 in __pthread_cond_wait_common (abstime=0x7f1941b25640, clockid=0, mutex=0x7f192204c110, cond=0x7f192204c138) at pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7f192204c138, mutex=0x7f192204c110, abstime=0x7f1941b25640) at pthread_cond_wait.c:643
#5  0x00007f194a5004c8 in WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) () at /lib64/libjavascriptcoregtk-4.1.so.0
#6  0x00007f194a4bea23 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) () at /lib64/libjavascriptcoregtk-4.1.so.0
#7  0x00007f194a4bf9fc in WTF::sleep(WTF::Seconds) () at /lib64/libjavascriptcoregtk-4.1.so.0
#8  0x00007f194b6d647c in  () at /lib64/libwebkit2gtk-4.1.so.0
#9  0x00007f194b6d6e3f in  () at /lib64/libwebkit2gtk-4.1.so.0
#10 0x00007f194a4ed0ae in  () at /lib64/libjavascriptcoregtk-4.1.so.0
#11 0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#12 0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 5 (Thread 0x7f19433cb6c0 (LWP 696) "dconf worker"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f192c000bb0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eae2c in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#3  0x00007f1944eec97d in  () at /usr/lib64/gio/modules/libdconfsettings.so
#4  0x00007f1948516fbe in  () at /lib64/libglib-2.0.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 4 (Thread 0x7f1943bfd6c0 (LWP 683) "gdbus"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f193801ccc0, nfds=6, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eb04f in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007f194879a8c6 in  () at /lib64/libgio-2.0.so.0
#4  0x00007f1948516fbe in  () at /lib64/libglib-2.0.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 3 (Thread 0x7f19443fe6c0 (LWP 682) "gmain"):
#0  0x00007f19482b048f in __GI___poll (fds=0x7f1934000c20, nfds=5, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eae2c in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#3  0x00007f19484eae71 in  () at /lib64/libglib-2.0.so.0
#4  0x00007f1948516fbe in  () at /lib64/libglib-2.0.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 2 (Thread 0x7f1944bff6c0 (LWP 681) "pool-spawner"):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f1948544480 in g_cond_wait () at /lib64/libglib-2.0.so.0
#2  0x00007f19484b4f4b in  () at /lib64/libglib-2.0.so.0
#3  0x00007f1948517602 in  () at /lib64/libglib-2.0.so.0
#4  0x00007f1948516fbe in  () at /lib64/libglib-2.0.so.0
#5  0x00007f1948236c64 in start_thread (arg=<optimized out>) at pthread_create.c:444
#6  0x00007f19482be550 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Thread 1 (Thread 0x7f1945502b80 (LWP 677) "liferea"):
#0  0x00007f19482b048f in __GI___poll (fds=0x9eb5e40, nfds=8, timeout=444) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f19484ead0e in  () at /lib64/libglib-2.0.so.0
#2  0x00007f19484eae2c in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#3  0x00007f194875e83d in g_application_run () at /lib64/libgio-2.0.so.0
#4  0x000000000042d2d8 in liferea_application_new (argc=3, argv=0x7fff345024d8) at ../liferea_application.c:343
#5  0x00007f19481d0bf0 in __libc_start_call_main (main=main@entry=0x41f550 <main>, argc=argc@entry=3, argv=argv@entry=0x7fff345024d8) at ../sysdeps/nptl/libc_start_call_main.h:58
#6  0x00007f19481d0cb9 in __libc_start_main_impl (main=0x41f550 <main>, argc=3, argv=0x7fff345024d8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff345024c8) at ../csu/libc-start.c:360
#7  0x000000000041f5f5 in _start () at ../sysdeps/x86_64/start.S:115
@rich-coe
Copy link
Contributor Author

rich-coe commented Aug 1, 2023

libglib-2_0-0-2.76.4-1.1.x86_64
libsoup-3_0-0-3.4.2-1.1.x86_64
libwebkit2gtk-4_1-0-2.40.4-1.1.x86_64

@rich-coe
Copy link
Contributor Author

rich-coe commented Aug 3, 2023

During updates, the last message is 499/1092.
I noticed that the update monitor shows 5 simultaneous downloads, and updates continuously, then the number of active on the left side dwindles, til its only processing one at a time.
Then it stops updating all together and is 'stuck'.
I suspect that there are some feeds that 'error out', and this is holding a download slot active even though nothing is occurring.
numberOfActiveJobs = 5

@rich-coe
Copy link
Contributor Author

rich-coe commented Aug 5, 2023

Threre's a couple URLs where libsoup is not timing out, the https connection is getting closed, and the job callback is never called.

I'm working on a test case outside of liferea to debug libsoup.

There may be another problem, as I have a work-around in place and updates are still not working.

@rich-coe
Copy link
Contributor Author

rich-coe commented Aug 11, 2023

There's two issues I also seeing in the current setup

  • youtube video's will not play - get the message 'If playback doesn't begin shortly, try restarting your device'
    I found a note about missing gstreamer plugins, but I have all the plugins mentioned.
  • when update fetches a subscription url and the return status is 304 with 0 bytes received, the subscription is in the error state. [ submitted pr in Subscription Update with no available update signals an error #1285 ]
    I upgraded libsoup to master/4705c0cb725a from 3.4.2 to pick up the fix 'session: handle request cancellation earlier'.
    It didn't fix the issue with the 'bad' urls, but it did fix the issue with the all the subscription urls reporting errors.
    [Edit. commented too soon, the subscriptions that have no update are back to being in 'error' state. ]
    /

@rich-coe
Copy link
Contributor Author

I have a better handle on the issue, but no solution yet.
Update subscription

  • processing job request (feed)
  • complete job request (feed)
  • trying to download icon
  • adding favicon (2-6)
  • processing job request favicon(2)
  • libsoup error ( one of )
    (liferea:19676): GLib-GIO-DEBUG: 09:48:25.131: IPv4 DNS error: Error resolving “FQDN”: Name or service not known
    (liferea:19676): GLib-GIO-DEBUG: 09:48:55.246: GSocketClient: Connection failed: Could not connect to FQDN: Network is unreachable
  • job never errors out

I'm still working on a test case that exhibits the issue.

@lwindolf
Copy link
Owner

@rich-coe That's ugly. I could not reproduce the problem so far. I'll research whether there is some good timeout handling possible killing old requests.

@lwindolf lwindolf added this to the 1.15.2 milestone Aug 14, 2023
@rich-coe
Copy link
Contributor Author

Here's a log of what I'm observing:

13:50:23 UPDATE : Scheduling Horse Drawn Games to be updated
13:50:23 UPDATE : Resetting last poll counter of https://www.horsedrawngames.com/feed/ to 1692989423968850.
13:50:24 UPDATE : processing job request (https://www.horsedrawngames.com/feed/) [1] 0x8dec6b0
13:50:24 NET    : downloading https://www.horsedrawngames.com/feed/
> GET /feed/ HTTP/2
> Soup-Debug-Timestamp: 1692989424
> Soup-Debug: SoupSession 1 (0x1ac6e90), SoupMessage 14 (0xa34c610), GSocket 9 (0x8e1bc60)
> Accept: application/atom+xml,application/xml;q=0.9,text/xml;q=0.8,*/*;q=0.7
> Accept-Encoding: gzip, deflate, br
> User-Agent: Liferea/1.15.0 (Linux; https://lzone.de/liferea/) AppleWebKit (KHTML, like Gecko)
  
< HTTP/2 200 OK
< Soup-Debug-Timestamp: 1692989425
< Soup-Debug: SoupMessage 14 (0xa34c610)
< Last-Modified: Sun, 10 Jun 2018 09:50:52 GMT
< ETag: "583742bd9638bfec68cab50fe1af90b6"
< Content-Type: text/xml; charset=UTF-8
< Content-Encoding: br
< Vary: Accept-Encoding
< Date: Fri, 25 Aug 2023 18:50:25 GMT
< Server: LiteSpeed
< x-powered-by: PHP/5.6.40
< x-pingback: https://www.horsedrawngames.com/2014/xmlrpc.php
< alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"
  
13:50:25 NET    : download status code: 200
13:50:25 NET    : source after download: >>>https://www.horsedrawngames.com/feed/<<<
13:50:25 NET    : 61705 bytes downloaded
13:50:25 UPDATE : complete job request (https://www.horsedrawngames.com/feed/) [0] 0x8dec6b0
13:50:25 UPDATE : feed_parse (https://www.horsedrawngames.com/feed/) 
13:50:25 UPDATE : feed_parse (https://www.horsedrawngames.com/feed/) 3: attempting rss
13:50:25 UPDATE : feed_parse (https://www.horsedrawngames.com/feed/) 3: success
13:50:25 UPDATE : discovered feed format: rss
13:50:25 UPDATE : old item set 0x9e77140 of (node id=jgwiluw):
13:50:25 UPDATE : current cache size: 11
13:50:25 UPDATE : current cache limit: 5000
13:50:25 UPDATE : downloaded feed size: 10
13:50:25 UPDATE : flag count: 0
13:50:25 UPDATE : trying to merge "BinaryFormatter on iOS" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "BinaryFormatter on iOS" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Shader syntax highlighting in Visual Studio 2013" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Shader syntax highlighting in Visual Studio 2013" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "The case of the continually checked out prefabs" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "The case of the continually checked out prefabs" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Ring buffers / circular buffers" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Ring buffers / circular buffers" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Visual Studio shader syntax highlighting part 2" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Visual Studio shader syntax highlighting part 2" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Remote debug / live update of Unity builds on device" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Remote debug / live update of Unity builds on device" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Hdg Remote Debug – How It Works" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Hdg Remote Debug – How It Works" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Hdg Remote Debug – Released!" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Hdg Remote Debug – Released!" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Decoding iOS crash call stacks" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Decoding iOS crash call stacks" to node id "jgwiluw"...
13:50:25 UPDATE : trying to merge "Type-safe object pool for Unity" to node id "jgwiluw"
13:50:25 UPDATE : -> not adding "Type-safe object pool for Unity" to node id "jgwiluw"...
13:50:25 UPDATE : added 0 new items
13:50:25 UPDATE : 0 new items, cache limit is 5000 -> dropping 0 items
13:50:25 UPDATE : trying to download icon for "Horse Drawn Games"

13:50:25 UPDATE : (2) adding favicon search URL: https://www.horsedrawngames.com
13:50:25 UPDATE : (3) adding favicon search URL: https://www.horsedrawngames.com
13:50:25 UPDATE : (5) adding favicon source URL: https://www.horsedrawngames.com/feed/favicon.ico
13:50:25 UPDATE : (6) adding favicon source URL: https://www.horsedrawngames.com/favicon.ico
13:50:25 UPDATE : Icon 'jgwiluw' trying URL: 'https://www.horsedrawngames.com'
13:50:25 UPDATE : processing job request (https://www.horsedrawngames.com) [1] 0x8e2d700
13:50:25 NET    : downloading https://www.horsedrawngames.com

@rich-coe
Copy link
Contributor Author

rich-coe commented Sep 1, 2023

Here's a the log from G_MESSAGES_DEBUG=all, I don't know why I didn't have it on earlier.

12:49:15 NET    : downloading https://www.horsedrawngames.com/feed/
(liferea:770): libsoup-http2-DEBUG: 12:49:16.390: [CLIENT] [C4-S1] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:770): libsoup-http2-DEBUG: 12:49:16.390: [CLIENT] [C4-S1] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=1, category=REQUEST finished=1
(liferea:770): libsoup-http2-DEBUG: 12:49:16.390: [CLIENT] [C4-S1] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
> GET /feed/ HTTP/2
> Soup-Debug-Timestamp: 1693590556
(liferea:770): libsoup-http2-DEBUG: 12:49:17.371: [CLIENT] [C4-S1] [READ_DATA] [SESSION] Closed stream 1: NO_ERROR
(liferea:770): libsoup-http2-DEBUG: 12:49:17.372: [CLIENT] [C4-S1] [READ_DATA] Client stream EOF
(liferea:770): libsoup-http2-DEBUG: 12:49:17.372: [CLIENT] [C4-S1] [READ_DATA] [SESSION] State READ_DATA -> READ_DONE
12:49:17 NET    : download status code: 200
12:49:17 NET    : source after download: >>>https://www.horsedrawngames.com/feed/<<<
12:49:17 NET    : 61705 bytes downloaded
12:49:17 UPDATE : complete job request (https://www.horsedrawngames.com/feed/) [2] 0x7b43f80
12:49:17 NET    : downloading https://www.horsedrawngames.com
(liferea:770): libsoup-http2-DEBUG: 12:49:17.764: [CLIENT] [C4-S3] [NONE] [SESSION] Request made for www.horsedrawngames.com
(liferea:770): libsoup-http2-DEBUG: 12:49:17.764: [CLIENT] [C4-S3] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:770): libsoup-http2-DEBUG: 12:49:17.764: [CLIENT] [C4-S3] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=3, category=REQUEST finished=1
(liferea:770): libsoup-http2-DEBUG: 12:49:17.764: [CLIENT] [C4-S3] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
> GET  HTTP/2
> Soup-Debug-Timestamp: 1693590557
> Soup-Debug: SoupSession 1 (0x114a770), SoupMessage 6 (0x7b336d0), GSocket 4 (0x7b41fb0)
> Accept: application/atom+xml,application/xml;q=0.9,text/xml;q=0.8,*/*;q=0.7
> Accept-Encoding: gzip, deflate, br
> User-Agent: Liferea/1.15.0 (Linux; https://lzone.de/liferea/) AppleWebKit (KHTML, like Gecko)
  
(liferea:770): libsoup-http2-DEBUG: 12:49:17.993: [CLIENT] [C4-S0] [-] [SEND] [GOAWAY]

The issue is the [GOAWAY], I'm assuming the connection is closed.
Possibly because the second request is so close to the first.
I'm looking at getting libsoup to return the error to the caller.

@rich-coe
Copy link
Contributor Author

rich-coe commented Sep 1, 2023

Opened libsoup#363 to track this issue.

@rich-coe
Copy link
Contributor Author

Submitted merge request to libsoup with patch https://gitlab.gnome.org/GNOME/libsoup/-/merge_requests/377

@rich-coe
Copy link
Contributor Author

Log with patch:

08:45:36 NET    : downloading https://www.horsedrawngames.com
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.390: [CLIENT] [C5-S0] [-] [SEND] [SETTINGS] stream_id=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.390: [CLIENT] [C5-S0] [-] [SEND] [WINDOW_UPDATE] stream_id=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.390: [CLIENT] [C5-S1] [NONE] [SESSION] Request made for www.horsedrawngames.com
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.390: [CLIENT] [C5-S1] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.390: [CLIENT] [C5-S1] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=1, category=REQUEST finished=1
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.390: [CLIENT] [C5-S1] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
> GET  HTTP/2
> Soup-Debug-Timestamp: 1694353536
> Soup-Debug: SoupSession 1 (0xcfa310), SoupMessage 8 (0x7eee440), GSocket 5 (0x991310)
> Accept: application/atom+xml,application/xml;q=0.9,text/xml;q=0.8,*/*;q=0.7
> Accept-Encoding: gzip, deflate, br
> User-Agent: Liferea/1.15.0 (Linux; https://lzone.de/liferea/) AppleWebKit (KHTML, like Gecko)
  
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] [SETTINGS] Beginning: stream_id=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] [SETTINGS] Received: stream_id=0, flags=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] [WINDOW_UPDATE] Beginning: stream_id=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] [WINDOW_UPDATE] Received: stream_id=0, flags=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] WINDOW_UPDATE: increment=16777216, total=16842751
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] [SETTINGS] Beginning: stream_id=0
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [RECV] [SETTINGS] Received: stream_id=0, flags=1
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [SEND] [SETTINGS] Failed stream 0: The current session is closing
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S0] [-] [SEND] [GOAWAY]
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S1] [WRITE_DONE] [SESSION] Error: PROTOCOL_ERROR
(liferea:31519): libsoup-http2-DEBUG: 08:45:36.413: [CLIENT] [C5-S1] [WRITE_DONE] Finished stream 1: interrupted
< HTTP/2 0 (null)
< Soup-Debug-Timestamp: 1694353536
< Soup-Debug: SoupMessage 8 (0x7eee440)
  
08:45:36 NET    : download status code: 0
08:45:36 NET    : source after download: >>>https://www.horsedrawngames.com/<<<
08:45:36 NET    : 0 bytes downloaded
08:45:36 UPDATE : complete job request (https://www.horsedrawngames.com) [0] 0x82eadd0

@lwindolf lwindolf modified the milestones: 1.15.2, 1.5.3, 1.15.3, 1.15.4 Sep 15, 2023
@rich-coe
Copy link
Contributor Author

I think this is occurring with the following sequence:

  • open connection to host and fetch rss feed
  • immediately after download complete, issue 2 or 3 simultaneous request on unique 3 urls for an icon
  • remote host denial of service logic triggers and closes one or all the connections

I am going to revisit generating a test case with this new information.

@rich-coe
Copy link
Contributor Author

rich-coe commented Sep 13, 2024

I've modified update.c to use GThreadPool, one for high priority, 3 entries, and one for non-high priority, 3 entries.
net.c has been modified from using the libsoup async api, to using the synchronous api.
I use a thread local libsoup session unique for each thread.

I'm still facing yet another bug in libsoup, so I'm still not satisfied with it.

@lwindolf
Copy link
Owner

@rich-coe Thanks for investigating this!

@rich-coe
Copy link
Contributor Author

I've made one more change to improve job handling.
After the job is complete, I only call the job callback on the main UI thread at 5 second intervals.
This allows the UI to stay responsive. I need to experiment with the timeout, as 5 s. may be 'too long'.
I have also changed the number of libsoup download threads from 3 to 5.

I'm currently chasing the one two bugs I found in libsoup.
Opened libsoup#394 which is a problem I found several times as one of several feedburner.com feeds closes(?) the socket and makes libsoup unhappy.

And libsoup#393 which happened only once, while I was chasing down libsoup#394, but looks similar in that libsoup is trying to read from a closed stream but on a http2 socket.

I started chasing down the feedburner bug with -fsanitize=address as valgrind did not work for me (liferea memory space too large?). I now have compiled libsoup with -fsanitize as well, and I am waiting for one of the feeds to be unhappy.

@rich-coe
Copy link
Contributor Author

After fixing libsoup#393 to fix running synchronous libsoup on separate threads, I'm working on the next bug with -fsanitize=address.

Below is several crashes and the debug output from libsoup/glib on the url causing the crash. The last output has the sanitize output. Unfortunately, I didn't have libnghttp2 compiled with -g when I built it for -fsanitize.

I'm now running with -g in libnghttp2 along with -fsanitize. I hope the line numbers help me track down the issue.

From the debug, it looks like the url host is closing the socket early which is causing the issue in libnghttp2 and/or libsoup.

I'm going to write a small test case using the host urls causing the issue and see if I can get the error to happen more frequently. The error doesn't happen often. I'm only updating feeds at 4 hour intervals.

::::: lfx.1905 :::::

(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S27] [NONE] [SESSION] Request made for www.youtube.com/feeds/videos.xml?channel_id=UCEsapINL8xaNEOYKoha5t4w
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S27] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S27] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=27, category=REQUEST finished=1
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S27] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S0] [-] [RECV] [PING] Beginning: stream_id=0
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S0] [-] [RECV] [PING] Received: stream_id=0, flags=0
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.257: [CLIENT] [C5264-S0] [-] [SEND] [PING] stream_id=0
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.345: [CLIENT] [C5264-S27] [WRITE_DONE] [RECV] [HEADERS] Beginning: stream_id=27
(liferea:2589199): libsoup-http2-DEBUG: 18:38:37.345: [CLIENT] [C5264-S27] [WRITE_DONE] [SESSION] State WRITE_DONE -> READ_HEADERS

::::: lfx.1906 :::::

(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S3] [NONE] [SESSION] Request made for www.youtube.com/feeds/videos.xml?channel_id=UCam8VtqRmUKCD-HWZgHtMEg
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S3] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S3] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=3, category=REQUEST finished=1
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S3] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S0] [-] [RECV] [PING] Beginning: stream_id=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S0] [-] [RECV] [PING] Received: stream_id=0, flags=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.627: [CLIENT] [C2173-S0] [-] [SEND] [PING] stream_id=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.695: [CLIENT] [C2173-S3] [WRITE_DONE] [RECV] [HEADERS] Beginning: stream_id=3
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.695: [CLIENT] [C2173-S3] [WRITE_DONE] [SESSION] State WRITE_DONE -> READ_HEADERS
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_HEADERS] [RECV] [HEADERS] Received: stream_id=3, flags=4
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_HEADERS] [HEADERS] category=RESPONSE status=200
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_HEADERS] [RECV] [DATA] Beginning: stream_id=3
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_HEADERS] [SESSION] State READ_HEADERS -> READ_DATA_START
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_DATA_START] [DATA] Received chunk, stream_id=3 len=1369, flags=1, paused=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_DATA_START] [DATA] Sniffed content
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_DATA_START] [SESSION] State READ_DATA_START -> READ_DATA
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.696: [CLIENT] [C2173-S3] [READ_DATA] [DATA] Received chunk, stream_id=3 len=1378, flags=1, paused=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [DATA] Received chunk, stream_id=3 len=1378, flags=1, paused=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [DATA] Received chunk, stream_id=3 len=1244, flags=1, paused=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [RECV] [DATA] Received: stream_id=3, flags=1
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [RECV] [DATA] Received: stream_id=3, flags=1
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [RECV] [DATA] window=5369/6291456
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [RECV] [DATA] window=5369/6291456
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [SESSION] Closed stream 3: NO_ERROR
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S3] [READ_DATA] [SESSION] Closed stream 3: NO_ERROR
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S0] [-] [RECV] [PING] Beginning: stream_id=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.697: [CLIENT] [C2173-S0] [-] [RECV] [PING] Received: stream_id=0, flags=0
(liferea:3251124): libsoup-http2-DEBUG: 12:15:41.706: [CLIENT] [C2173-S0] [-] [SEND] [PING] stream_id=0

::::: lfx.1908 :::::

(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.362: [CLIENT] [C497-S3] [NONE] [SESSION] Request made for www.youtube.com/feeds/videos.xml?channel_id=UCyhEZKz-LOwgktptEOh6_Iw
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.362: [CLIENT] [C497-S3] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.362: [CLIENT] [C497-S3] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=3, category=REQUEST finished=1
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.362: [CLIENT] [C497-S3] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.363: [CLIENT] [C497-S0] [-] [RECV] [PING] Beginning: stream_id=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.363: [CLIENT] [C497-S0] [-] [RECV] [PING] Received: stream_id=0, flags=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.363: [CLIENT] [C497-S0] [-] [SEND] [PING] stream_id=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.424: [CLIENT] [C497-S3] [WRITE_DONE] [RECV] [HEADERS] Beginning: stream_id=3
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.424: [CLIENT] [C497-S3] [WRITE_DONE] [SESSION] State WRITE_DONE -> READ_HEADERS
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.424: [CLIENT] [C497-S3] [READ_HEADERS] [RECV] [HEADERS] Received: stream_id=3, flags=4
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.424: [CLIENT] [C497-S3] [READ_HEADERS] [HEADERS] category=RESPONSE status=200
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_HEADERS] [RECV] [DATA] Beginning: stream_id=3
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_HEADERS] [SESSION] State READ_HEADERS -> READ_DATA_START
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA_START] [DATA] Received chunk, stream_id=3 len=1369, flags=0, paused=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA_START] [DATA] Sniffed content
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA_START] [SESSION] State READ_DATA_START -> READ_DATA
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [DATA] Received chunk, stream_id=3 len=1378, flags=0, paused=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [DATA] Received chunk, stream_id=3 len=889, flags=0, paused=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] Received: stream_id=3, flags=0
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] window=3636/6291456
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] Beginning: stream_id=3
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] Received: stream_id=3, flags=1
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.425: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] Received: stream_id=3, flags=1
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.426: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] window=3636/6291456
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.426: [CLIENT] [C497-S3] [READ_DATA] [RECV] [DATA] window=3636/6291456
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.426: [CLIENT] [C497-S3] [READ_DATA] [SESSION] Closed stream 3: NO_ERROR
(liferea:3816013): libsoup-http2-DEBUG: 06:55:03.426: [CLIENT] [C497-S3] [READ_DATA] [SESSION] Closed stream 3: NO_ERROR

::::: lfx.1918 :::::

(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S3] [NONE] [SESSION] Request made for www.youtube.com/feeds/videos.xml?channel_id=UCF18N219OPiOcElz_hSYoIQ
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S3] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S3] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=3, category=REQUEST finished=1
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S3] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S0] [-] [RECV] [PING] Beginning: stream_id=0
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S0] [-] [RECV] [PING] Received: stream_id=0, flags=0
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.468: [CLIENT] [C494-S0] [-] [SEND] [PING] stream_id=0
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.538: [CLIENT] [C494-S3] [WRITE_DONE] [RECV] [HEADERS] Beginning: stream_id=3
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.538: [CLIENT] [C494-S3] [WRITE_DONE] [SESSION] State WRITE_DONE -> READ_HEADERS
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.556: [CLIENT] [C494-S3] [READ_HEADERS] [SEND] [RST_STREAM] Failed stream 3: The current session is closing
(liferea:3883490): libsoup-http2-DEBUG: 16:22:53.556: [CLIENT] [C494-S0] [-] [SEND] [GOAWAY]

::::: lfx.1920 :::::

(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S23] [NONE] [SESSION] Request made for www.youtube.com/feeds/videos.xml?channel_id=UCs1x7rAGb3yDKaNBe7Jzajw
(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S23] [NONE] [SESSION] State NONE -> WRITE_HEADERS
(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S23] [WRITE_HEADERS] [SEND] [HEADERS] stream_id=23, category=REQUEST finished=1
(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S23] [WRITE_HEADERS] [SESSION] State WRITE_HEADERS -> WRITE_DONE
(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S0] [-] [RECV] [PING] Beginning: stream_id=0
(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S0] [-] [RECV] [PING] Received: stream_id=0, flags=0
(liferea:3961193): libsoup-http2-DEBUG: 05:49:15.993: [CLIENT] [C794-S0] [-] [SEND] [PING] stream_id=0
(liferea:3961193): libsoup-http2-DEBUG: 05:49:16.051: [CLIENT] [C794-S23] [WRITE_DONE] [RECV] [HEADERS] Beginning: stream_id=23
(liferea:3961193): libsoup-http2-DEBUG: 05:49:16.051: [CLIENT] [C794-S23] [WRITE_DONE] [SESSION] State WRITE_DONE -> READ_HEADERS
(liferea:3961193): libsoup-http2-DEBUG: 05:49:16.055: [CLIENT] [C794-S23] [READ_HEADERS] [SEND] [RST_STREAM] Failed stream 23: The current session is closing
(liferea:3961193): libsoup-http2-DEBUG: 05:49:16.056: [CLIENT] [C794-S0] [-] [SEND] [GOAWAY]

=================================================================
==3961193==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x506005ddd993 at pc 0x7f7539c148a0 bp 0x7f752bffabf0 sp 0x7f752bffabe8
WRITE of size 1 at 0x506005ddd993 thread T8
    #0 0x7f7539c1489f in nghttp2_hd_huff_decode (/usr/local/lib64/libnghttp2.so.14+0x5589f) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #1 0x7f7539c1044d in hd_inflate_read_huff (/usr/local/lib64/libnghttp2.so.14+0x5144d) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #2 0x7f7539c1288c in nghttp2_hd_inflate_hd_nv (/usr/local/lib64/libnghttp2.so.14+0x5388c) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #3 0x7f7539bf0c09 in inflate_header_block (/usr/local/lib64/libnghttp2.so.14+0x31c09) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #4 0x7f7539bfd7d2 in nghttp2_session_mem_recv2 (/usr/local/lib64/libnghttp2.so.14+0x3e7d2) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #5 0x7f7539bf9919 in nghttp2_session_mem_recv (/usr/local/lib64/libnghttp2.so.14+0x3a919) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #6 0x7f753e6ca6da in io_read ../libsoup/http2/soup-client-message-io-http2.c:442
    #7 0x7f753e6d3e84 in io_run ../libsoup/http2/soup-client-message-io-http2.c:1680
    #8 0x7f753e6d4001 in io_run_until ../libsoup/http2/soup-client-message-io-http2.c:1708
    #9 0x7f753e6d448e in soup_client_message_io_http2_run_until_read ../libsoup/http2/soup-client-message-io-http2.c:1748
    #10 0x7f753e70bb6d in soup_client_message_io_run_until_read ../libsoup/soup-client-message-io.c:78
    #11 0x7f753e733af3 in soup_message_io_run_until_read ../libsoup/soup-message.c:2804
    #12 0x7f753e754287 in soup_session_send ../libsoup/soup-session.c:3202
    #13 0x7f753e7558eb in soup_session_send_and_splice ../libsoup/soup-session.c:3574
    #14 0x7f753e754e8a in soup_session_send_and_read ../libsoup/soup-session.c:3400
    #15 0x4464cc in network_process_callback ../net.c:153
    #16 0x448480 in network_process_request_inner ../net.c:358
    #17 0x448680 in network_process_request ../net.c:367
    #18 0x45ad01 in update_job_run ../update.c:704
    #19 0x45aeae in update_dequeue_job ../update.c:725
    #20 0x7f753b9042d1  (/lib64/libglib-2.0.so.0+0x8e2d1) (BuildId: 9b58710d8f17aa9f5541f04b5435bbf8b4322f69)
    #21 0x7f753b90381d  (/lib64/libglib-2.0.so.0+0x8d81d) (BuildId: 9b58710d8f17aa9f5541f04b5435bbf8b4322f69)
    #22 0x7f7543c62dd5  (/lib64/libasan.so.8+0x62dd5) (BuildId: 5615a04b8d0a5a8eafa661f7235e2d98fa2b9137)
    #23 0x7f753b492e21 in start_thread (/lib64/libc.so.6+0x92e21) (BuildId: b9cf52933b9968ed778c3a60dd03d2c3e18313f2)
    #24 0x7f753b51433b in __GI___clone3 (/lib64/libc.so.6+0x11433b) (BuildId: b9cf52933b9968ed778c3a60dd03d2c3e18313f2)

0x506005ddd993 is located 0 bytes after 51-byte region [0x506005ddd960,0x506005ddd993)
allocated by thread T8 here:
    #0 0x7f7543cfc7d7 in malloc (/lib64/libasan.so.8+0xfc7d7) (BuildId: 5615a04b8d0a5a8eafa661f7235e2d98fa2b9137)
    #1 0x7f7539c162e8 in default_malloc (/usr/local/lib64/libnghttp2.so.14+0x572e8) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #2 0x7f7539c163d9 in nghttp2_mem_malloc (/usr/local/lib64/libnghttp2.so.14+0x573d9) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #3 0x7f7539c1a655 in nghttp2_rcbuf_new (/usr/local/lib64/libnghttp2.so.14+0x5b655) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #4 0x7f7539c126ec in nghttp2_hd_inflate_hd_nv (/usr/local/lib64/libnghttp2.so.14+0x536ec) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #5 0x7f7539bf0c09 in inflate_header_block (/usr/local/lib64/libnghttp2.so.14+0x31c09) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #6 0x7f7539bfd7d2 in nghttp2_session_mem_recv2 (/usr/local/lib64/libnghttp2.so.14+0x3e7d2) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #7 0x7f7539bf9919 in nghttp2_session_mem_recv (/usr/local/lib64/libnghttp2.so.14+0x3a919) (BuildId: 48c2d08bc9e4867069f09865313366617c592163)
    #8 0x7f753e6ca6da in io_read ../libsoup/http2/soup-client-message-io-http2.c:442
    [.....]

@rich-coe
Copy link
Contributor Author

Tracking libnghttp2#2251 AddressSanitizer: heap-buffer-overflow nghttp2_hd_huff_decode

@rich-coe
Copy link
Contributor Author

rich-coe commented Oct 3, 2024

After growing disillusioned by libsoup (3 bugs and growing), and then libnghhtp2 (or libsoup's use there of), I looked for another approach. Looking I found libcurl, and hey, didn't liferea used to use libcurl? YES.

So without importing the 'glibcurl', I built using libcurl. I have an implementation working. I'd like to get several days (a week or so of runtime) to shake out any errors.

All is not roses yet. I have to figure out how to fetch org.gnome.system.proxy values from dbus to get the current user's proxy settings.

I'd also like to show the connection error status on the feed status page. But not strictly necessary for this solution to get reviewed.

@lwindolf
Copy link
Owner

lwindolf commented Oct 3, 2024

The actually sad thing is that one would think with libsoup3 being a GNOME base library it would be highly stable and well tested.

@rich-coe
Copy link
Contributor Author

rich-coe commented Oct 3, 2024

In libsoup's defense, I think the primary issue is sockets to a server that get closed because of either rate limiting or 'too many attempts from this ip', where they are not closed normally, but forcefully/abnormally shutdown.
That's supposition on my part. I didn't discover a method for making it fail on a loopback.

It's also very hard to debug.

  • The http1 code has no implemented debugging for the state machine.
  • The http2 code is using nghttp2, and instrumenting nghttp2 with libasan/sanitizer makes a whole other set of apps fail that include it. I say to be successful you'd have to isolate the debugging/testing of it in a chroot or vm.
  • The libsoup synchronous code operates on top of the async code and still calls out to the glib/gtk main loop.
  • There was a long time between it reproducing.

@lwindolf
Copy link
Owner

lwindolf commented Oct 4, 2024

@rich-coe Would it help eliminating the HTTP2 code path entirely by disabling some libsoup3 feature flag. I guess HTTP2 for a feed reader is only additional overhead.

@SenorFusion
Copy link

SenorFusion commented Dec 10, 2024

@lwindolf @rich-coe

This exact same thing is happening to me. My feed updates just freeze on one feed and refuse to update any further.

Using the update monitor to Stop all updates and try updating again does not work - liferea must be restarted before I can update again.

It only started since I updated to Fedora 40 with 15.4, in case that is important.

I am also having to only run liferea via the webkit workaround in case that is relevant. WEBKIT_DISABLE_DMABUF_RENDERER=1 liferea - This also only started happening on Fedora 40 / 15.4

I have tried updating to F41 / 15.7 and that did not change anything.

This bug has sadly made liferea pretty much unusable to me because I cannot reliably update my feeds. (Been a very happy user for at least 10 years!)

Happy to post whatever log would be helpful if you can tell me how to pull it.

@rich-coe
Copy link
Contributor Author

@SenorFusion
I have a change I've been running for several weeks to test for stability.
I'll merge, post it, and let you know. You then can either pull it from the branch or the pr.

@rich-coe
Copy link
Contributor Author

@SenorFusion
pull from rich-code/liferea branch bug1276 or the associated pr.
let me know if you have any issues.

@rich-coe
Copy link
Contributor Author

@lwindolf
The pr check is failing because lunar is no longer a supported ubuntu version?

@SenorFusion
Copy link

@SenorFusion pull from rich-code/liferea branch bug1276 or the associated pr. let me know if you have any issues.

@rich-coe Thank you for this!

I spent a few minutes and couldn't get it to compile and I don't have time to chase down all the dependencies right now, but hopefully someone with the build setup can test and merge it into main.

@rich-coe
Copy link
Contributor Author

@SenorFusion
What linux distro and version are you on?
Can you upload the build log as an attachment?

@SenorFusion
Copy link

@SenorFusion What linux distro and version are you on? Can you upload the build log as an attachment?

Fedora 40. I also tried on a clean install of 41 and got similar results

 liferea-bug1276]$ ./autogen.sh 
configure.ac:76: warning: macro 'AM_GLIB_GNU_GETTEXT' not found in library
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
libtoolize: and rerunning libtoolize and aclocal.
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
intltoolize: 'po/Makefile.in.in' exists: use '--force' to overwrite
configure.ac:76: warning: macro 'AM_GLIB_GNU_GETTEXT' not found in library
src/Makefile.am:122: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
autoreconf: error: automake failed with exit status: 1
intltoolize: 'po/Makefile.in.in' exists: use '--force' to overwrite
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for ar... ar
checking the archiver (ar) interface... ar
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for file... file
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether NLS is requested... yes
checking for intltool >= 0.40.4... 0.51.0 found
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for perl... /usr/bin/perl
checking for perl >= 5.8.1... 5.38.2
checking for XML::Parser... ok
checking for gcc... (cached) gcc
checking whether the compiler supports GNU C... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to enable C11 features... (cached) none needed
checking whether gcc understands -c and -o together... (cached) yes
checking dependency style of gcc... (cached) gcc3
checking whether make sets $(MAKE)... (cached) yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
./configure: line 14579: GLIB_GSETTINGS: command not found
checking for strsep... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for 	gtk+-3.0 >= 3.24.0
		glib-2.0 >= 2.68.0
		gio-2.0 >= 2.50.0
		pango >= 1.4.0
		libxml-2.0 >= 2.6.27
		libxslt >= 1.1.19
		sqlite3 >= 3.7.0
		gmodule-2.0 >= 2.0.0
		gthread-2.0
                libcurl >= 8.9.0
		libsoup-3.0 >= 3.0.7
		webkit2gtk-4.1
		json-glib-1.0
		gobject-introspection-1.0
		gsettings-desktop-schemas
		libpeas-1.0 >= 1.0.0
		libpeas-gtk-1.0 >= 1.0.0
		fribidi >= 0.19.7... no
configure: error: Package requirements (	gtk+-3.0 >= 3.24.0
		glib-2.0 >= 2.68.0
		gio-2.0 >= 2.50.0
		pango >= 1.4.0
		libxml-2.0 >= 2.6.27
		libxslt >= 1.1.19
		sqlite3 >= 3.7.0
		gmodule-2.0 >= 2.0.0
		gthread-2.0
                libcurl >= 8.9.0
		libsoup-3.0 >= 3.0.7
		webkit2gtk-4.1
		json-glib-1.0
		gobject-introspection-1.0
		gsettings-desktop-schemas
		libpeas-1.0 >= 1.0.0
		libpeas-gtk-1.0 >= 1.0.0
		fribidi >= 0.19.7) were not met:

Package 'gtk+-3.0', required by 'virtual:world', not found
Package 'glib-2.0', required by 'virtual:world', not found
Package 'gio-2.0', required by 'virtual:world', not found
Package 'pango', required by 'virtual:world', not found
Package 'libxml-2.0', required by 'virtual:world', not found
Package 'libxslt', required by 'virtual:world', not found
Package 'sqlite3', required by 'virtual:world', not found
Package 'gmodule-2.0', required by 'virtual:world', not found
Package 'gthread-2.0', required by 'virtual:world', not found
Package 'libcurl', required by 'virtual:world', not found
Package 'libsoup-3.0', required by 'virtual:world', not found
Package 'webkit2gtk-4.1', required by 'virtual:world', not found
Package 'json-glib-1.0', required by 'virtual:world', not found
Package 'gobject-introspection-1.0', required by 'virtual:world', not found
Package 'gsettings-desktop-schemas', required by 'virtual:world', not found
Package 'libpeas-1.0', required by 'virtual:world', not found
Package 'libpeas-gtk-1.0', required by 'virtual:world', not found
Package 'fribidi', required by 'virtual:world', not found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables PACKAGE_CFLAGS
and PACKAGE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

and here if I run configure instead of the autogen script

./configure 
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for ar... ar
checking the archiver (ar) interface... ar
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for file... file
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether NLS is requested... yes
checking for intltool >= 0.40.4... 0.51.0 found
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for perl... /usr/bin/perl
checking for perl >= 5.8.1... 5.38.2
checking for XML::Parser... ok
checking for gcc... (cached) gcc
checking whether the compiler supports GNU C... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to enable C11 features... (cached) none needed
checking whether gcc understands -c and -o together... (cached) yes
checking dependency style of gcc... (cached) gcc3
checking whether make sets $(MAKE)... (cached) yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
./configure: line 14579: GLIB_GSETTINGS: command not found
checking for strsep... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for 	gtk+-3.0 >= 3.24.0
		glib-2.0 >= 2.68.0
		gio-2.0 >= 2.50.0
		pango >= 1.4.0
		libxml-2.0 >= 2.6.27
		libxslt >= 1.1.19
		sqlite3 >= 3.7.0
		gmodule-2.0 >= 2.0.0
		gthread-2.0
                libcurl >= 8.9.0
		libsoup-3.0 >= 3.0.7
		webkit2gtk-4.1
		json-glib-1.0
		gobject-introspection-1.0
		gsettings-desktop-schemas
		libpeas-1.0 >= 1.0.0
		libpeas-gtk-1.0 >= 1.0.0
		fribidi >= 0.19.7... no
configure: error: Package requirements (	gtk+-3.0 >= 3.24.0
		glib-2.0 >= 2.68.0
		gio-2.0 >= 2.50.0
		pango >= 1.4.0
		libxml-2.0 >= 2.6.27
		libxslt >= 1.1.19
		sqlite3 >= 3.7.0
		gmodule-2.0 >= 2.0.0
		gthread-2.0
                libcurl >= 8.9.0
		libsoup-3.0 >= 3.0.7
		webkit2gtk-4.1
		json-glib-1.0
		gobject-introspection-1.0
		gsettings-desktop-schemas
		libpeas-1.0 >= 1.0.0
		libpeas-gtk-1.0 >= 1.0.0
		fribidi >= 0.19.7) were not met:

Package 'gtk+-3.0', required by 'virtual:world', not found
Package 'glib-2.0', required by 'virtual:world', not found
Package 'gio-2.0', required by 'virtual:world', not found
Package 'pango', required by 'virtual:world', not found
Package 'libxml-2.0', required by 'virtual:world', not found
Package 'libxslt', required by 'virtual:world', not found
Package 'sqlite3', required by 'virtual:world', not found
Package 'gmodule-2.0', required by 'virtual:world', not found
Package 'gthread-2.0', required by 'virtual:world', not found
Package 'libcurl', required by 'virtual:world', not found
Package 'libsoup-3.0', required by 'virtual:world', not found
Package 'webkit2gtk-4.1', required by 'virtual:world', not found
Package 'json-glib-1.0', required by 'virtual:world', not found
Package 'gobject-introspection-1.0', required by 'virtual:world', not found
Package 'gsettings-desktop-schemas', required by 'virtual:world', not found
Package 'libpeas-1.0', required by 'virtual:world', not found
Package 'libpeas-gtk-1.0', required by 'virtual:world', not found
Package 'fribidi', required by 'virtual:world', not found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables PACKAGE_CFLAGS
and PACKAGE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

and here if I try the recommend env var issue:

my_dir=$HOME/tmp/liferea
$ ./autogen.sh --prefix=$my_dir
configure.ac:76: warning: macro 'AM_GLIB_GNU_GETTEXT' not found in library
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
libtoolize: and rerunning libtoolize and aclocal.
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
intltoolize: 'po/Makefile.in.in' exists: use '--force' to overwrite
configure.ac:76: warning: macro 'AM_GLIB_GNU_GETTEXT' not found in library
src/Makefile.am:122: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
autoreconf: error: automake failed with exit status: 1
intltoolize: 'po/Makefile.in.in' exists: use '--force' to overwrite
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for ar... ar
checking the archiver (ar) interface... ar
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for file... file
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether NLS is requested... yes
checking for intltool >= 0.40.4... 0.51.0 found
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for perl... /usr/bin/perl
checking for perl >= 5.8.1... 5.38.2
checking for XML::Parser... ok
checking for gcc... (cached) gcc
checking whether the compiler supports GNU C... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to enable C11 features... (cached) none needed
checking whether gcc understands -c and -o together... (cached) yes
checking dependency style of gcc... (cached) gcc3
checking whether make sets $(MAKE)... (cached) yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
./configure: line 14579: GLIB_GSETTINGS: command not found
checking for strsep... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for 	gtk+-3.0 >= 3.24.0
		glib-2.0 >= 2.68.0
		gio-2.0 >= 2.50.0
		pango >= 1.4.0
		libxml-2.0 >= 2.6.27
		libxslt >= 1.1.19
		sqlite3 >= 3.7.0
		gmodule-2.0 >= 2.0.0
		gthread-2.0
                libcurl >= 8.9.0
		libsoup-3.0 >= 3.0.7
		webkit2gtk-4.1
		json-glib-1.0
		gobject-introspection-1.0
		gsettings-desktop-schemas
		libpeas-1.0 >= 1.0.0
		libpeas-gtk-1.0 >= 1.0.0
		fribidi >= 0.19.7... no
configure: error: Package requirements (	gtk+-3.0 >= 3.24.0
		glib-2.0 >= 2.68.0
		gio-2.0 >= 2.50.0
		pango >= 1.4.0
		libxml-2.0 >= 2.6.27
		libxslt >= 1.1.19
		sqlite3 >= 3.7.0
		gmodule-2.0 >= 2.0.0
		gthread-2.0
                libcurl >= 8.9.0
		libsoup-3.0 >= 3.0.7
		webkit2gtk-4.1
		json-glib-1.0
		gobject-introspection-1.0
		gsettings-desktop-schemas
		libpeas-1.0 >= 1.0.0
		libpeas-gtk-1.0 >= 1.0.0
		fribidi >= 0.19.7) were not met:

Package 'gtk+-3.0', required by 'virtual:world', not found
Package 'glib-2.0', required by 'virtual:world', not found
Package 'gio-2.0', required by 'virtual:world', not found
Package 'pango', required by 'virtual:world', not found
Package 'libxml-2.0', required by 'virtual:world', not found
Package 'libxslt', required by 'virtual:world', not found
Package 'sqlite3', required by 'virtual:world', not found
Package 'gmodule-2.0', required by 'virtual:world', not found
Package 'gthread-2.0', required by 'virtual:world', not found
Package 'libcurl', required by 'virtual:world', not found
Package 'libsoup-3.0', required by 'virtual:world', not found
Package 'webkit2gtk-4.1', required by 'virtual:world', not found
Package 'json-glib-1.0', required by 'virtual:world', not found
Package 'gobject-introspection-1.0', required by 'virtual:world', not found
Package 'gsettings-desktop-schemas', required by 'virtual:world', not found
Package 'libpeas-1.0', required by 'virtual:world', not found
Package 'libpeas-gtk-1.0', required by 'virtual:world', not found
Package 'fribidi', required by 'virtual:world', not found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables PACKAGE_CFLAGS
and PACKAGE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

@rich-coe
Copy link
Contributor Author

@SenorFusion
The current problem is you are missing the package fribidi >= 0.19.7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants