[xmonad] darcs patch: reveal: don't insert non-clients into the set of mappe...

Tomas Janousek tomi at nomi.cz
Sat Mar 27 17:59:21 EDT 2010


Sat Mar 27 22:42:43 CET 2010  Tomas Janousek <tomi at nomi.cz>
  * reveal: don't insert non-clients into the set of mapped windows
  
  In xmonad-core, this fixes a small bug that caused doIgnored windows to get
  into `mapped' and never be removed from there.
  
  In the context of xmonad-contrib, this fixes a tremendous memory leak that
  could be triggered by using MouseResizableTile and UrgencyHook at the same
  time. MRT would create dummy windows that would get added to `mapped' by the
  reveal call in `windows'. As these were not removed (removal from `mapped' is
  filtered by `isClient'), they'd stay there forever and due to an inefficiency
  in UrgencyHook would eat up all memory sooner or later.


Fun fact: this also triggered a bug in glibc after a few days such that
periodic signals + fork hangs whenever the program consumes more than a
certain amount of memory.
-- 
Tomáš Janoušek, a.k.a. Liskni_si, http://work.lisk.in/
-------------- next part --------------

New patches:

[reveal: don't insert non-clients into the set of mapped windows
Tomas Janousek <tomi at nomi.cz>**20100327214243
 Ignore-this: 68c0a43d761e626cb9544ca386f4846d
 
 In xmonad-core, this fixes a small bug that caused doIgnored windows to get
 into `mapped' and never being removed from there.
 
 In the context of xmonad-contrib, this fixes a tremendous memory leak that
 could be triggered by using MouseResizableTile and UrgencyHook at the same
 time. MRT would create dummy windows that would get added to `mapped' by the
 reveal call in `windows'. As these were not removed (removal from `mapped' is
 filtered by `isClient'), they'd stay there forever and due to an inefficiency
 in UrgencyHook would eat up all memory sooner or later.
] hunk ./XMonad/Operations.hs 203
 reveal w = withDisplay $ \d -> do
     setWMState w normalState
     io $ mapWindow d w
-    modify (\s -> s { mapped = S.insert w (mapped s) })
+    whenX (isClient w) $ modify (\s -> s { mapped = S.insert w (mapped s) })
 
 -- | The client events that xmonad is interested in
 clientMask :: EventMask

Context:

[loc.hs: hlintify
gwern0 at gmail.com**20100213231537
 Ignore-this: c447928ce68d0a968b55af3539c979fa
] 
[Various clean-ups suggested by HLint
Spencer Janssen <spencerjanssen at gmail.com>**20100214025750
 Ignore-this: ccaa6e774f2f8169e6083eddcffe31b6
] 
[Make the --replace docs consistent
Spencer Janssen <spencerjanssen at gmail.com>**20100213002647
 Ignore-this: c99526bce66ae1154fbf5713622f035d
] 
[Add --replace flag with documentation (issue 99).
Adam Vogt <vogt.adam at gmail.com>**20091220183529
 Ignore-this: c56000295b75c66309913e29e1671d88
] 
[Fix compile error when using base-3 (thanks bogner).
Adam Vogt <vogt.adam at gmail.com>**20100211063938
 Ignore-this: 60ba65613bc746e7e88f11a7e30b050f
] 
[Broadcast PropertyChange events (needed for layouts with decoration)
Daniel Schoepe <daniel.schoepe at gmail.com>**20100113204017
 Ignore-this: c8315f438fed66b12282c9bfe70a4d0b
] 
[Rename numlockMask to numberlockMask to help users of the template config.
Adam Vogt <vogt.adam at gmail.com>**20100118162256
 Ignore-this: 4050ed2d1ad373386c2e2b44145f07d9
 
 Without the change, the errors are like:
 
 >     [ unrelated error messages ]
 >     No constructor has all these fields: `numlockMask',
 >       `terminal', [every other field set]
 
 With the change:
 
 >     `numlockMask' is not a record selector
 >     [ context where numlockMask is named ]
] 
[Correct warnings with ghc-6.12
Adam Vogt <vogt.adam at gmail.com>**20100118181532
 Ignore-this: a48ed095b72aedec9eeb88781ace66dc
 
 Changes include:
   - compatibility with base-4 or 3 (base-2 untested) by using
     extensible-exceptions. This adds an additional dependency for users of
     ghc<6.10)
   - list all dependencies again when -ftesting (change in Cabal-1.8.0.2)
   - remove unnecessary imports
   - suppress -fwarn-unused-do-bind, with appropriate Cabal-1.8 workaround,
     described here:
     http://www.haskell.org/pipermail/xmonad/2010-January/009554.html
] 
[Add xfork: a forkProcess that works around process global state
Spencer Janssen <spencerjanssen at gmail.com>**20091223061623
 Ignore-this: 3f968260d8c1b6710c82566520c47c43
] 
[TAG 0.9.1
Spencer Janssen <spencerjanssen at gmail.com>**20091216233643
 Ignore-this: 856abdca8283155bbb8bdf003797ba34
] 
[extra-source-files for the new manpage
Spencer Janssen <spencerjanssen at gmail.com>**20091216232005
 Ignore-this: 919d964238198dd56d96a5052c2419c7
] 
[Bump to 0.9.1
Spencer Janssen <spencerjanssen at gmail.com>**20091216231110
 Ignore-this: 8a03850d758e1e4030d930cd8bf08ba9
] 
[Determine numlockMask automatically, fixes #120
Spencer Janssen <spencerjanssen at gmail.com>**20091216012140
 Ignore-this: d80c82dd0a23dc7a77fdc32fd2792130
] 
[Update for X11 1.5.0.0
Spencer Janssen <spencerjanssen at gmail.com>**20091216011700
 Ignore-this: 669c764c4c0ca516c8bdc1dfa35cd66
] 
[Safer X11 version dependency
Spencer Janssen <spencerjanssen at gmail.com>**20091216010330
 Ignore-this: 8297f7a6a65c5c97f83f860f642fc25
] 
[man/xmonad.hs: remove reference to deprecated 'dynamicLogDzen' function
Brent Yorgey <byorgey at cis.upenn.edu>**20091126053908
 Ignore-this: 7aeeac9791ffd3e6ac22bf158ea86536
] 
[A few tweaks to --verbose-version
Spencer Janssen <spencerjanssen at gmail.com>**20091208040729
 Ignore-this: cf3d6a904d23891829c10f4966974673
] 
[Generalize the type of (<+>). It can be used for keybindings too.
Adam Vogt <vogt.adam at gmail.com>**20091205233611
 Ignore-this: af15248be5e483d1a6e924f786fcc1c4
] 
[Main.hs +--verbose-version flag
gwern0 at gmail.com**20091128144840
 Ignore-this: 61a081f33adb460ea459950a750dd93f
 This resolves http://code.google.com/p/xmonad/issues/detail?id=320 by adding a
 --verbose-version option yielding output like "xmonad 0.9 compiled by ghc 6.10 for linux/i386"
] 
[Swap the order that windows are mapped/unmapped.  Addresses #322
Spencer Janssen <spencerjanssen at gmail.com>**20091119025440
 Ignore-this: 22087204f1b84dae98a3cf2b7f116d3f
] 
[Add GPL warning to GenerateManpage
Spencer Janssen <spencerjanssen at gmail.com>**20091111000106
 Ignore-this: ea24691b8198976a4088a2708e0b4c94
] 
[Add a basic header to the html manpage output
Adam Vogt <vogt.adam at gmail.com>**20091028033042
 Ignore-this: 2641e0fb3179616075fa7549b57740f3
] 
[Use pandoc to convert a markdown manpage tranlation to html and man.
Adam Vogt <vogt.adam at gmail.com>**20091028030639
 Ignore-this: cdf7cdc8e44b21de8fc7725bde299792
] 
[Support for extensible state in contrib modules.
Daniel Schoepe <daniel.schoepe at gmail.com>**20091106115050
 Ignore-this: d04ee1989313ed5710c94f9d7fda3f2a
] 
[Set SIGPIPE to default in forked processes
Spencer Janssen <spencerjanssen at gmail.com>**20091106223743
 Ignore-this: f73943e4fe6c5f08967ddb82afad3eaa
] 
[TAG 0.9
Spencer Janssen <spencerjanssen at gmail.com>**20091026004641
 Ignore-this: 80347d432f3b606c8d722536d0d729aa
] 
Patch bundle hash:
5aacd238a2e6b8a7817f0de11742e50c20e98e24



More information about the xmonad mailing list