--- rxvt-unicode/src/rxvttoolkit.C 2010/12/14 08:01:51 1.110 +++ rxvt-unicode/src/rxvttoolkit.C 2011/01/27 02:03:30 1.114 @@ -229,10 +229,7 @@ rxvt_drawable &rxvt_screen::scratch_drawable (int w, int h) { - // it's actually faster to re-allocate every time. don't ask me - // why, but its likely no big deal there are no roundtrips - // (I think/hope). - if (!scratch_area || w > scratch_w || h > scratch_h || 1/*D*/) + if (!scratch_area || w > scratch_w || h > scratch_h) { if (scratch_area) { @@ -317,6 +314,11 @@ char *displayResource, *xe; XrmDatabase rdb1, database = 0; +#if !XLIB_ILLEGAL_ACCESS + /* work around a bug in XrmSetDatabase where it frees the db, see ref_next */ + database = XrmGetStringDatabase (""); +#endif + // for ordering, see for example http://www.faqs.org/faqs/Xt-FAQ/ Subject: 20 // as opposed to "standard practise", we always read in ~/.Xdefaults @@ -448,7 +450,7 @@ screen = DefaultScreen (dpy); root = DefaultRootWindow (dpy); - assert (sizeof (xa_names) / sizeof (char *) == NUM_XA); + assert (ARRAY_LENGTH(xa_names) == NUM_XA); XInternAtoms (dpy, (char **)xa_names, NUM_XA, False, xa); XrmSetDatabase (dpy, get_resources (false)); @@ -493,6 +495,10 @@ // TODO: somehow check whether the database files/resources changed // before affording re-loading/parsing XrmDestroyDatabase (XrmGetDatabase (dpy)); +#if XLIB_ILLEGAL_ACCESS + /* work around a bug in XrmSetDatabase where it frees the db */ + dpy->db = 0; +#endif XrmSetDatabase (dpy, get_resources (true)); } @@ -509,6 +515,7 @@ #ifdef USE_XIM xims.clear (); #endif + XrmDestroyDatabase (XrmGetDatabase (dpy)); XCloseDisplay (dpy); }