On Thu, 10 Jul 2008, Julien BLACHE wrote: > Brad Sawatzky <[EMAIL PROTECTED]> wrote: > > > What is the intent of duplicating s->opt into s->local_opt? If it is to > > provide a stable local version of the scanner descriptors then shouldn't > > Per the SANE standard, the descriptors have to remain available at the > same location until the device is closed. If it wasn't the case, it'd > be a major pain for the frontends to keep track of the options. (it > could be done with more API calls, though, but that's added complexity > for no benefit) > > > the .constraint union (*string_list, *word_list, or *range) be duplicated > > as well? > > Nope. Whenever that changes, the backend instructs the frontend to > reload the options. The constraints can and do change depending on > what options you set. Also the type of constraint can change > (resolution list vs. free resolution).
Right. So isn't the problem that the menu is storing a pointer to a memory that is subsequently free()'d, not the data itself? Why is the str_list[] array of pointers in xsane-front-gtk.c:xsane_option_menu_new() assumed to be stable for the Source options? The underlying bug is either: a) The menu is being generated with its .label member pointing at memory that is subsequently free()'d. That makes the memory referenced by menu.label subject volatile. - FIX: Create and store a stable version of the menu.label string. This can be done either in the s->local_opt structure (which would be a pain to implement), or make a copy at the time the menu is created per my initial patch. - NOTE: It looks like this is exactly what is done for the resolution menu created by xsane_resolution_widget_new() (using strdup to make local copies of the resolution strings for use in menu[].label). - OR - b) The pointer in the menu.label for the active source menu (in this case) is not being kept current. - FIX: Recreate/update the gtk menu and do a panel_rebuild every time the net backend changes the NON-local opt array (since that is the memory referenced by the pointer stored in menu.label. -- Brad -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]