Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-03-27 15:44:17 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-03-27 15:56:54 +0300
commite22b870b4a4c02f762471744675f5b4d8a940304 (patch)
tree159170612d9e44e65934ff4e9e432980c4e1f9b2 /source/blender/blenkernel/intern/blender_undo.c
parent3bca1ef26bcbd65f1a9063f2d073c92f83c79b70 (diff)
Cleanup: global undo (minor changes to internals)
- Get memory usage from MemFile instead of MEM API avoids possible invalid when threads alloc memory. - Use size_t instead of uint and uintptr_t to store size. - Rename UndoElem.str -> filename - Rename MemFileChunk.ident -> is_identical
Diffstat (limited to 'source/blender/blenkernel/intern/blender_undo.c')
-rw-r--r--source/blender/blenkernel/intern/blender_undo.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/source/blender/blenkernel/intern/blender_undo.c b/source/blender/blenkernel/intern/blender_undo.c
index e3a5edb2049..4efca5bcc41 100644
--- a/source/blender/blenkernel/intern/blender_undo.c
+++ b/source/blender/blenkernel/intern/blender_undo.c
@@ -75,10 +75,11 @@
typedef struct UndoElem {
struct UndoElem *next, *prev;
- char str[FILE_MAX];
+ /* Only for 'UNDO_DISK' */
+ char filename[FILE_MAX];
char name[BKE_UNDO_STR_MAX];
MemFile memfile;
- uintptr_t undosize;
+ size_t undo_size;
} UndoElem;
static ListBase undobase = {NULL, NULL};
@@ -107,10 +108,12 @@ static int read_undosave(bContext *C, UndoElem *uel)
fileflags = G.fileflags;
G.fileflags |= G_FILE_NO_UI;
- if (UNDO_DISK)
- success = (BKE_blendfile_read(C, uel->str, NULL, 0) != BKE_BLENDFILE_READ_FAIL);
- else
+ if (UNDO_DISK) {
+ success = (BKE_blendfile_read(C, uel->filename, NULL, 0) != BKE_BLENDFILE_READ_FAIL);
+ }
+ else {
success = BKE_blendfile_read_from_memfile(C, &uel->memfile, NULL, 0);
+ }
/* restore */
BLI_strncpy(G.main->name, mainstr, sizeof(G.main->name)); /* restore */
@@ -127,7 +130,6 @@ static int read_undosave(bContext *C, UndoElem *uel)
/* name can be a dynamic string */
void BKE_undo_write(bContext *C, const char *name)
{
- uintptr_t maxmem, totmem, memused;
int nr /*, success */ /* UNUSED */;
UndoElem *uel;
@@ -174,40 +176,40 @@ void BKE_undo_write(bContext *C, const char *name)
/* disk save version */
if (UNDO_DISK) {
static int counter = 0;
- char filepath[FILE_MAX];
+ char filename[FILE_MAX];
char numstr[32];
int fileflags = G.fileflags & ~(G_FILE_HISTORY); /* don't do file history on undo */
- /* calculate current filepath */
+ /* Calculate current filename. */
counter++;
counter = counter % U.undosteps;
BLI_snprintf(numstr, sizeof(numstr), "%d.blend", counter);
- BLI_make_file_string("/", filepath, BKE_tempdir_session(), numstr);
+ BLI_make_file_string("/", filename, BKE_tempdir_session(), numstr);
- /* success = */ /* UNUSED */ BLO_write_file(CTX_data_main(C), filepath, fileflags, NULL, NULL);
+ /* success = */ /* UNUSED */ BLO_write_file(CTX_data_main(C), filename, fileflags, NULL, NULL);
- BLI_strncpy(curundo->str, filepath, sizeof(curundo->str));
+ BLI_strncpy(curundo->filename, filename, sizeof(curundo->filename));
}
else {
MemFile *prevfile = NULL;
if (curundo->prev) prevfile = &(curundo->prev->memfile);
- memused = MEM_get_memory_in_use();
/* success = */ /* UNUSED */ BLO_write_file_mem(CTX_data_main(C), prevfile, &curundo->memfile, G.fileflags);
- curundo->undosize = MEM_get_memory_in_use() - memused;
+ curundo->undo_size = curundo->memfile.size;
}
if (U.undomemory != 0) {
+ size_t maxmem, totmem;
/* limit to maximum memory (afterwards, we can't know in advance) */
totmem = 0;
- maxmem = ((uintptr_t)U.undomemory) * 1024 * 1024;
+ maxmem = ((size_t)U.undomemory) * 1024 * 1024;
/* keep at least two (original + other) */
uel = undobase.last;
while (uel && uel->prev) {
- totmem += uel->undosize;
+ totmem += uel->undo_size;
if (totmem > maxmem) break;
uel = uel->prev;
}