main: set the GIOChannel encoding to binary master
authorMamoru TASAKA <mtasaka@fedoraproject.org>
Sun, 22 Mar 2020 07:46:48 +0000 (16:46 +0900)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 28 Mar 2020 14:39:59 +0000 (16:39 +0200)
https://developer.gnome.org/glib/stable/glib-IO-Channels.html#g-io-channel-set-encoding
says the default encoding is UTF-8, and setting encoding to NULL is safe
use with binary data.

Actually without setting encoding to NULL, on Fedora 32, trying to terminate pcmanfm with
Ctrl-C (SIGINT) causes pcmanfm hang at g_io_channel_read_chars() in on_unix_signal(),
and this is now causing system reboot delayed for 90 seconds with systemd.

src/pcmanfm.c

index 9be80f7..08a7fc3 100644 (file)
@@ -3,6 +3,7 @@
  *
  *      Copyright 2009 - 2010 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
  *      Copyright 2012-2015 Andriy Grytsenko (LStranger) <andrej@rep.kiev.ua>
+ *      Copyright 2020 Mamoru TASAKA <mtasaka@fedoraproject.org>
  *
  *      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
@@ -239,6 +240,7 @@ int main(int argc, char** argv)
     {
         GIOChannel* ch = g_io_channel_unix_new(signal_pipe[0]);
         g_io_add_watch(ch, G_IO_IN|G_IO_PRI, (GIOFunc)on_unix_signal, NULL);
+        g_io_channel_set_encoding(ch, NULL, NULL);
         g_io_channel_unref(ch);
 
         /* intercept signals */