diff options
author | Wolfgang Draxinger <Wolfgang.Draxinger@draxit.de> | 2014-10-07 03:38:55 +0200 |
---|---|---|
committer | Wolfgang Draxinger <Wolfgang.Draxinger@draxit.de> | 2014-10-07 03:38:55 +0200 |
commit | 1e387fc8eee4925616967edd26de0ee416dbce3f (patch) | |
tree | f6be0b844c724d6c4891f325912bb4f3f2f26c4b /samples/X11/x11atomstuffer/x11atomstuffer.c | |
parent | 3ce7214d2300e2769667649625d160dcdc01499c (diff) | |
parent | b62b7bf28ec0069e6f460fa0f07b64a0dba72557 (diff) | |
download | codesamples-1e387fc8eee4925616967edd26de0ee416dbce3f.tar.gz codesamples-1e387fc8eee4925616967edd26de0ee416dbce3f.tar.bz2 |
Merge branch 'master' of git://github.com/datenwolf/codesamples
Diffstat (limited to 'samples/X11/x11atomstuffer/x11atomstuffer.c')
-rw-r--r-- | samples/X11/x11atomstuffer/x11atomstuffer.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/samples/X11/x11atomstuffer/x11atomstuffer.c b/samples/X11/x11atomstuffer/x11atomstuffer.c new file mode 100644 index 0000000..dfa86de --- /dev/null +++ b/samples/X11/x11atomstuffer/x11atomstuffer.c @@ -0,0 +1,73 @@ +/*------------------------------------------------------------------------ + * What happens if you stuff the X11 server with large and large amounts + * of atoms? When does it run out of memory? How is its performance + * impaired by this? This is a little program to experimenting with + * torturing the X11 server by overfeeding it with atoms. + * + * (c) 2013 datenwolf + * + * License agreement: This source code is provided "as is". You + * can use this source code however you want for your own personal + * use. If you give this source code to anybody else then you must + * leave this message in it. +------------------------------------------------------------------------*/ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <stdint.h> + +#include <time.h> +#include <unistd.h> + +#include <X11/Xatom.h> +#include <X11/Xutil.h> + +static int Xscreen; +static Display *Xdisplay; + +char const doitkey[] = "wastemyX11server"; + +int main(int argc, char *argv[]) +{ + uint64_t i; + unsigned int r = getpid() ^ time(NULL); + + if( argc < 2 || strcmp(argv[1], doitkey) ) { + fprintf(stderr, +"***************** WARNING! *****************\n" +"\n" +"This program wastes serious resources of the\n" +"X11 server it is started on. Do not execute\n" +"this program on a production X11 session as\n" +"the allocated atoms can not be freed/reused\n" +"without resetting or quiting the X11 server.\n" +"\n" +"To actually perform this, do the following:\n" +"\n" +"%s %s\n" +"\n" +"***************** WARNING! *****************\n", + argv[0], doitkey); + return 0; + } + + Xdisplay = XOpenDisplay(NULL); + if (!Xdisplay) { + fprintf(stderr, "Couldn't connect to X server\n"); + return -1; + } + Xscreen = DefaultScreen(Xdisplay); + + for(i=0; i < 0xffffffff; i++) { + char atomstr[33]; + snprintf(atomstr,32, "_wasted_0x%08x_0x%08x", r, (unsigned int)i); + XInternAtom(Xdisplay, atomstr, False); + if( !(i % 0x00010000 ) ) { + fprintf(stderr, "%s\n", atomstr); + } + } + + return 0; +} + |