On Saturday, 7 October 2006 14:56, Stefan Seyfried wrote: > On Fri, Oct 06, 2006 at 07:37:23PM +0200, Stefan Seyfried wrote: > > On Fri, Oct 06, 2006 at 03:54:08PM +0200, Stefan Seyfried wrote: > > > Hi, > > > > > > i just had an idea :-) > > > > ok, so how about this: > > it does not work. > > > Index: s2ram.c > > =================================================================== > > RCS file: /cvsroot/suspend/suspend/s2ram.c,v > > retrieving revision 1.45 > > diff -u -p -r1.45 s2ram.c > > --- s2ram.c 20 Sep 2006 16:23:51 -0000 1.45 > > +++ s2ram.c 6 Oct 2006 17:32:56 -0000 > > @@ -10,11 +10,15 @@ > > #include <getopt.h> > > #include <errno.h> > > #include <string.h> > > +#include <sys/ioctl.h> > > +#include <syscall.h> > > +#include <unistd.h> > > > > #define S2RAM > > #include "vbetool/vbetool.h" > > #include "vt.h" > > #include "s2ram.h" > > +#include "swsusp.h" > > > > static void *vbe_buffer; > > /* Flags set from whitelist */ > > @@ -192,9 +196,15 @@ int s2ram_prepare(void) > > } > > > > /* Actually enter the suspend. May be ran on frozen system. */ > > -int s2ram_do(void) > > +int s2ram_do(int frozen, int snapshot_fd) > > { > > int ret = 0; > > + if (frozen) { > > + printf("calling suspend_to_ram ioctl\n"); > > + ret = suspend_to_ram(snapshot_fd); > > + goto out; > > + } > > + > > FILE *f = fopen("/sys/power/state", "w"); > > if (!f) { > > printf("/sys/power/state does not exist; what kind of ninja > > mutant machine is this?\n"); > > @@ -211,6 +221,7 @@ int s2ram_do(void) > > ret = errno; > > perror("s2ram_do"); > > } > > + out: > > return ret; > > } > > > > @@ -267,7 +278,7 @@ static void usage(void) > > int main(int argc, char *argv[]) > > { > > int i, id = -1, ret = 0, test_mode = 0, force = 0; > > - int active_console = -1; > > + int active_console = -1, snapshot_fd = -1, frozen = 0; > > struct option options[] = { > > { "test", no_argument, NULL, 'n'}, > > { "help", no_argument, NULL, 'h'}, > > @@ -354,13 +365,24 @@ int main(int argc, char *argv[]) > > printf("Switching from vt%d to vt1\n", active_console); > > chvt(1); > > > > + snapshot_fd = open("/dev/snapshot", O_RDONLY); > > + if (snapshot_fd < 0) > > + fprintf(stderr, "s2ram: Could not open the snapshot device\n"); > > + else > > + frozen = !freeze(snapshot_fd); > > + > > + fprintf(stderr, "frozen: %d\n", frozen); > > ret = s2ram_hacks(); > > if (ret) > > goto out; > > - ret = s2ram_do(); > > + ret = s2ram_do(frozen, snapshot_fd); > > s2ram_resume(); > > > > out: > > + if (frozen) > > + unfreeze(snapshot_fd); > > + if (snapshot_fd > 0) > > + close(snapshot_fd); > > usually it segfaults somewhere around here. Or more exactly, since i > tried reordering the stuff, it segfaults in the first glibc function > used. Not always, but every second or third suspend.
Hm, actually I'd prefer if it segfaulted every time. ;-) Anyway, have you tried to replace suspend_to_ram(snapshot_fd) in s2ram_do with a noop and see what happens? Rafael -- You never change things by fighting the existing reality. R. Buckminster Fuller ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Suspend-devel mailing list Suspend-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/suspend-devel