~mir-team/mir/fix-1546933-3

« back to all changes in this revision

Viewing changes to src/client/buffer_vault.cpp

  • Committer: Daniel van Vugt
  • Date: 2016-03-03 07:24:16 UTC
  • mfrom: (3324.1.34 development-branch)
  • Revision ID: daniel.van.vugt@canonical.com-20160303072416-u3u60nx38bu4wpgq
Merge latest trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
134
134
    auto it = buffers.find(protobuf_buffer.buffer_id());
135
135
    if (it == buffers.end())
136
136
    {
137
 
        auto buffer = factory->create_buffer(package, geom::Size{package->width, package->height}, format);
138
 
        buffers[protobuf_buffer.buffer_id()] = BufferEntry{ buffer, Owner::Self };
 
137
        geom::Size sz{package->width, package->height};
 
138
        if (sz != size)
 
139
        {
 
140
            lk.unlock();
 
141
            server_requests->free_buffer(protobuf_buffer.buffer_id());
 
142
            for (int i = 0; i != package->fd_items; ++i)
 
143
                close(package->fd[i]);
 
144
 
 
145
            server_requests->allocate_buffer(size, format, usage);
 
146
            return;
 
147
        }
 
148
 
 
149
        buffers[protobuf_buffer.buffer_id()] = 
 
150
            BufferEntry{ factory->create_buffer(package, sz, format), Owner::Self };
139
151
    }
140
152
    else
141
153
    {
 
154
        it->second.buffer->update_from(*package);
142
155
        if (size == it->second.buffer->size())
143
156
        { 
144
157
            it->second.owner = Owner::Self;
145
 
            it->second.buffer->update_from(*package);
146
158
        }
147
159
        else
148
160
        {