71{
72 if(!(adjustingWindow->window) ||
73 !(requestedChunk.
m_begin >= adjustingWindow->chunk.m_begin &&
74 requestedChunk.
m_end <= adjustingWindow->chunk.m_end))
75 {
76 m_file.unmap(adjustingWindow->window);
77
78 quint64 windowSize = adjustingWindow->defaultSize;
79 if(requestedChunk.
size() > windowSize) {
81 "KisMemoryWindow: the requested chunk is too "
82 "big to fit into the mapping! "
83 "Adjusting mapping to avoid SIGSEGV...";
84
85 windowSize = requestedChunk.
size();
86 }
87
88 adjustingWindow->chunk.setChunk(requestedChunk.
m_begin, windowSize);
89
90 if(adjustingWindow->chunk.m_end >= (quint64)
m_file.size()) {
91
92 quint64 newSize = (adjustingWindow->chunk.m_end + 1 + 32) & (~31ULL);
93
94#ifdef Q_OS_WIN32
105 if (otherWindow->chunk.size()) {
106 m_file.unmap(otherWindow->window);
107 }
108#else
109 Q_UNUSED(otherWindow);
110#endif
111
112 if (!
m_file.resize(newSize)) {
113 return false;
114 }
115
116#ifdef Q_OS_WIN32
117 if (otherWindow->chunk.size()) {
118 otherWindow->window =
m_file.map(otherWindow->chunk.m_begin,
119 otherWindow->chunk.size());
120 }
121#endif
122 }
123
124#ifdef Q_OS_UNIX
125
127#endif
128
129 adjustingWindow->window =
m_file.map(adjustingWindow->chunk.m_begin,
130 adjustingWindow->chunk.size());
131
132 if (!adjustingWindow->window) {
133 return false;
134 }
135 }
136
137 return true;
138}