diff options
author | bapt <bapt@FreeBSD.org> | 2014-03-16 04:20:58 +0800 |
---|---|---|
committer | bapt <bapt@FreeBSD.org> | 2014-03-16 04:20:58 +0800 |
commit | 63f5020bf40ba9ae3bb9fc12e564f02abe136eb2 (patch) | |
tree | ddbdf42fe067793ad25b4fd0e35087d06b4f9ea5 /x11-wm/i3 | |
parent | 742b569ae21ba60b4928d97493adc8c46fa6e6bc (diff) | |
download | freebsd-ports-gnome-63f5020bf40ba9ae3bb9fc12e564f02abe136eb2.tar.gz freebsd-ports-gnome-63f5020bf40ba9ae3bb9fc12e564f02abe136eb2.tar.zst freebsd-ports-gnome-63f5020bf40ba9ae3bb9fc12e564f02abe136eb2.zip |
- Fixes resourceleak in i3bar and memoryleak in i3
- Convert to USES=tar:bzip2
PR: ports/187617
Submitted by: Johannes Jost Meixner <xmj@chaot.net>
Obtained from: i3 git (http://code.stapelberg.de/git/i3/)
Diffstat (limited to 'x11-wm/i3')
-rw-r--r-- | x11-wm/i3/Makefile | 7 | ||||
-rw-r--r-- | x11-wm/i3/files/patch-memory-leak | 110 |
2 files changed, 113 insertions, 4 deletions
diff --git a/x11-wm/i3/Makefile b/x11-wm/i3/Makefile index fb9dfbdfe748..af901af0da6e 100644 --- a/x11-wm/i3/Makefile +++ b/x11-wm/i3/Makefile @@ -3,6 +3,7 @@ PORTNAME= i3 DISTVERSION= 4.7.2 +PORTREVISION= 1 CATEGORIES= x11-wm MASTER_SITES= http://i3wm.org/downloads/ @@ -20,14 +21,13 @@ LIB_DEPENDS= libstartup-notification-1.so:${PORTSDIR}/x11/startup-notification \ libcairo.so:${PORTSDIR}/graphics/cairo \ libpangocairo-1.0.so:${PORTSDIR}/x11-toolkits/pango \ libpcre.so:${PORTSDIR}/devel/pcre \ - libxcb-cursor.so.0:${PORTSDIR}/x11/xcb-util-cursor + libxcb-cursor.so:${PORTSDIR}/x11/xcb-util-cursor RUN_DEPENDS= p5-IPC-Run>=0:${PORTSDIR}/devel/p5-IPC-Run \ p5-Try-Tiny>=0:${PORTSDIR}/lang/p5-Try-Tiny \ p5-AnyEvent-I3>=0:${PORTSDIR}/devel/p5-AnyEvent-I3 USE_XORG= x11 xcb -USES= pkgconfig iconv gmake perl5 -USE_BZIP2= yes +USES= pkgconfig iconv gmake perl5 tar:bzip2 USE_PERL5= run LDFLAGS+= -L${LOCALBASE}/lib ${ICONV_LIB} MAKE_JOBS_UNSAFE= yes @@ -55,5 +55,4 @@ post-install: ${STAGEDIR}${PREFIX}/bin/i3-nagbar \ ${STAGEDIR}${PREFIX}/bin/i3-dump-log - .include <bsd.port.mk> diff --git a/x11-wm/i3/files/patch-memory-leak b/x11-wm/i3/files/patch-memory-leak new file mode 100644 index 000000000000..d7ea1a297f4d --- /dev/null +++ b/x11-wm/i3/files/patch-memory-leak @@ -0,0 +1,110 @@ +--- i3bar/src/xcb.c ++++ /i3bar/src/xcb.c +@@ -1395,8 +1395,8 @@ void realloc_sl_buffer(void) { + + mask |= XCB_GC_BACKGROUND; + vals[0] = colors.bar_fg; +- statusline_ctx = xcb_generate_id(xcb_connection); + xcb_free_gc(xcb_connection, statusline_ctx); ++ statusline_ctx = xcb_generate_id(xcb_connection); + xcb_void_cookie_t sl_ctx_cookie = xcb_create_gc_checked(xcb_connection, + statusline_ctx, + xcb_root, +--- src/commands.c ++++ src/commands.c +@@ -779,6 +779,12 @@ void cmd_resize(I3_CMD, char *way, char *direction, char *resize_px, char *resiz + + owindow *current; + TAILQ_FOREACH(current, &owindows, owindows) { ++ /* Don't handle dock windows (issue #1201) */ ++ if (current->con->window->dock) { ++ DLOG("This is a dock window. Not resizing (con = %p)\n)", current->con); ++ continue; ++ } ++ + Con *floating_con; + if ((floating_con = con_inside_floating(current->con))) { + cmd_resize_floating(current_match, cmd_output, way, direction, floating_con, px); +--- src/ipc.c ++++ src/ipc.c +@@ -833,14 +833,16 @@ handler_t handlers[8] = { + static void ipc_receive_message(EV_P_ struct ev_io *w, int revents) { + uint32_t message_type; + uint32_t message_length; +- uint8_t *message; ++ uint8_t *message = NULL; + + int ret = ipc_recv_message(w->fd, &message_type, &message_length, &message); + /* EOF or other error */ + if (ret < 0) { + /* Was this a spurious read? See ev(3) */ +- if (ret == -1 && errno == EAGAIN) ++ if (ret == -1 && errno == EAGAIN) { ++ FREE(message); + return; ++ } + + /* If not, there was some kind of error. We don’t bother + * and close the connection */ +@@ -863,6 +865,7 @@ static void ipc_receive_message(EV_P_ struct ev_io *w, int revents) { + + ev_io_stop(EV_A_ w); + free(w); ++ FREE(message); + + DLOG("IPC: client disconnected\n"); + return; +@@ -874,6 +877,8 @@ static void ipc_receive_message(EV_P_ struct ev_io *w, int revents) { + handler_t h = handlers[message_type]; + h(w->fd, message, 0, message_length, message_type); + } ++ ++ FREE(message); + } + + /* +--- dev/null ++++ testcases/t/222-regress-dock-resize.t +@@ -0,0 +1,42 @@ ++#!perl ++# vim:ts=4:sw=4:expandtab ++# ++# Please read the following documents before working on tests: ++# • http://build.i3wm.org/docs/testsuite.html ++# (or docs/testsuite) ++# ++# • http://build.i3wm.org/docs/lib-i3test.html ++# (alternatively: perldoc ./testcases/lib/i3test.pm) ++# ++# • http://build.i3wm.org/docs/ipc.html ++# (or docs/ipc) ++# ++# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf ++# (unless you are already familiar with Perl) ++# ++# Test that i3 does not crash when a command is issued that would resize a dock ++# client. ++# Ticket: #1201 ++# Bug still in: 4.7.2-107-g9b03be6 ++use i3test i3_autostart => 0; ++ ++my $config = <<'EOT'; ++# i3 config file (v4) ++font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 ++EOT ++ ++my $pid = launch_with_config($config); ++ ++my $i3 = i3(get_socket_path()); ++$i3->connect()->recv; ++ ++my $window = open_window( ++ wm_class => 'special', ++ window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'), ++); ++ ++cmd('[class="special"] resize grow height 160 px or 16 ppt'); ++ ++does_i3_live; ++ ++done_testing; |