Such an approach will make porting MineServer to use threads painful. (And I DO HOPE that MS will get multithreaded, eventually)
How about using this set of functions instead?
void getMapDataBlock(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * dest);
void setMapDataBlock(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * src);
void getMapDataMeta(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * dest);
void setMapDataMeta(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * src);
void getMapDataSkylight(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * dest);
void setMapDataSkylight(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * src);
void getMapDataBlocklight(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * dest);
void setMapDataBlocklight(int xmin, int xmax, int ymin, int ymax, int zmin, int zmax, unsigned char * src);
This would be safe (as long as the passed pointers are correct and of correct size), could be made thread-safe easily, would allow plugins be able not to care about chunks / internal storage methods. The underlying implementation would handle all the details regarding chunks (and later multithreadlocks). Also it doesn't seem to suffer from issues inherent with locks and it is efficient enough.