Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / setnewhandler.cpp
diff --git a/website/archive/binaries/mac/src/muscle/setnewhandler.cpp b/website/archive/binaries/mac/src/muscle/setnewhandler.cpp
new file mode 100644 (file)
index 0000000..73fd68c
--- /dev/null
@@ -0,0 +1,26 @@
+#include "muscle.h"\r
+#include <stdio.h>\r
+#include <new>\r
+\r
+const int ONE_MB = 1024*1024;\r
+const size_t RESERVE_BYTES = 8*ONE_MB;\r
+static void *EmergencyReserve = 0;\r
+\r
+void OnOutOfMemory()\r
+       {\r
+       free(EmergencyReserve);\r
+       fprintf(stderr, "\n*** OUT OF MEMORY ***\n");\r
+       fprintf(stderr, "Memory allocated so far %g MB\n", GetMemUseMB());\r
+       extern MSA *ptrBestMSA;\r
+       if (ptrBestMSA == 0)\r
+               fprintf(stderr, "No alignment generated\n");\r
+       else\r
+               SaveCurrentAlignment();\r
+       exit(EXIT_FatalError);\r
+       }\r
+\r
+void SetNewHandler()\r
+       {\r
+       EmergencyReserve = malloc(RESERVE_BYTES);\r
+       std::set_new_handler(OnOutOfMemory);\r
+       }\r