Bug #18104 still exists

Hello,
I am quite disappointed about BDB 5. One of the most nasty bugs (#18104) still
exists. As soon as you want to use the set_thread_count() feature, BDB will not
free the thread-control-block. If you connect/disconnect, BDB will stop working
quite early. You can re-produce this issue with any `db_*` tool.
The testcase:
#include <stdlib.h>
#include <db.h>
#define DIRECTORY "/tmp/db"
int main()
    /* open environment */
    DB_ENV *handle;
    int status = db_env_create( &handle, 0 );
    status = handle->set_cachesize( handle, 0, 32*1024*1024, 0 );
    status = handle->set_thread_count( handle, 0x100 );
    status = handle->open( handle, DIRECTORY, DB_CREATE, 0644 );
    if( status != 0 )
        return 1;
    /* raise error "Unable to allocate thread control block" */
    for( ;; )
        system( "db_stat -e -h " DIRECTORY " | grep process/thread | wc" );
    return 0;
}

Hi Sandra,
Hi Greg,
Our architecture is quite simple: a cron-job runs ENV->failchk() and ENV->txn_checkpoint()
once a minute (which should be fine, shouldn't it?)
The problem, neither ENV->close() nor ENV->failchk() removes outdated items from the
thread-control-block. One would expect, that the PID is added to the block as soon as the
process connects and removed when the process disconnects. But it is not.
If the block runs out of memory, BDB requires a recovery (see the down below testcase).
Usually ENV->failchk() cleans the thread-control-block, as soon as there are more items in
the block than "thread_count". Today three times it did not even remove them, if there were
more than "thread_count" items in the block - but this happend sporadic so it was difficult
to create a testcase.
Once ENV->failchk() cleans the thread-control-block, BDB works as expected. If a process
connects, the PID is added to the block, and as soon as the process disconnects, the PID is
removed from the thread-control-block. You can test this by looping the first loop 1090 times.
The testcase:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <db.h>
#include <errno.h>
#define DIRECTORY "/tmp/db"
static int bdb_is_alive( DB_ENV *dbenv, pid_t pid, db_threadid_t tid, u_int32_t flags )
    int status;
    status = kill( pid, 0 );
    if( status != -1 )
        return 1;
    if( errno == ESRCH )
        return 0;
    exit( 1 );  /* should never happen */
int main()
    system( "mkdir -p " DIRECTORY );
    system( "db_recover -h " DIRECTORY );
    system( "rm -rfv " DIRECTORY "/*" );
    /* open environment */
    int status, i;
    DB_ENV *handle;
    status = db_env_create( &handle, 0 );
    status = handle->set_cachesize( handle, 0, 32*1024*1024, 0 );
    status = handle->set_thread_count( handle, 1091 );
    status = handle->set_isalive( handle, bdb_is_alive );
    status = handle->open( handle, DIRECTORY, DB_CREATE, 0644 );
    if( status != 0 )
        return 1;   /* should never happen */
    status = handle->failchk( handle, 0 );
    status = handle->close( handle, 0 );
    /* Now start workers (`db_stat`) + failchks() */
    for( i=0; i < 1089; ++i )       /* thread_count - 2 */
        fprintf(stderr,"Number of items in the thread-control-block: "); fflush(stdout);
        system( "db_stat -e -h " DIRECTORY " | grep process/thread | wc -l" );
        status = db_env_create( &handle, 0 );
        status = handle->set_isalive( handle, bdb_is_alive );
        status = handle->open( handle, DIRECTORY, DB_CREATE, 0644 );
        if( status != 0 )
            return 1;   /* should never happen */
        status = handle->failchk( handle, 0 );      /* strange - does not remove the process-entries created by `db_stat` */
        if( status != 0 )
            return 1;   /* should never happen */
        status = handle->close( handle, 0 );
    /* raise error: "Unable to allocate thread control block" */
    for( i=1; i < 422; ++i )
        fprintf(stderr,"Number of items in the thread-control-block: "); fflush(stdout);
        system( "db_stat -e -h " DIRECTORY " | grep process/thread | wc -l" );
    /* You should see on stderr:
            db_stat: Unable to allocate thread control block
            db_stat: Unable to allocate thread control block
            db_stat: DB_ENV->open: /tmp/db: Cannot allocate memory
    fprintf(stderr,"BDB is dead now. Only `db_recover` helps...\n%s\n",db_version(NULL,NULL,NULL));
    return 0;
}

Similar Messages

  • Index with "or" clause (BUG still exists?)

    The change log for 2.3.10 mentions "Fixed a bug that caused incorrect query plans to be generated for predicates that used the "or" operator in conjunction with indexes [#15328]."
    But looks like the Bug still exists.
    I am listing the steps to-repro. Let me know if i have missed something (or if the bug needs to be fixed)
    DATA
    dbxml> openContainer test.dbxml
    dbxml> getDocuments
    2 documents found
    dbxml> print
    <node><value>a</value></node>
    <node><value>b</value></node>
    INDEX (just one string equality index on node "value")
    dbxml> listIndexes
    Index: unique-node-metadata-equality-string for node {http://www.sleepycat.com/2002/dbxml}:name
    Index: node-element-equality-string for node {}:value
    2 indexes found.
    QUERY
    setVerbose 2 2
    preload test.dbxml
    query 'let $temp := fn:compare("test", "test") = 0
    let $results := for $i in collection("test.dbxml")
    where ($temp or $i/node[value = ("a")])
    return $i
    return <out>{$temp}{$results}</out>'
    When $temp is true i expected the result set to contain both the records, but that was not the case with the index. It works well when there is no index!
    Result WITH INDEX
    dbxml> print
    <out>true<node><value>a</value></node></out>
    Result WITHOUT INDEX
    dbxml> print
    <out>true<node><value>a</value></node><node><value>b</value></node></out>

    Hi Vijay,
    This is a completely different bug, relating to predicate expressions that do not examine nodes. Please try the following patch, to see if it fixes this bug for you:
    --- dbxml-2.3.10-original/dbxml/src/dbxml/optimizer/QueryPlanGenerator.cpp     2007-04-18 10:05:24.000000000 +0100
    +++ dbxml-2.3.10/dbxml/src/dbxml/optimizer/QueryPlanGenerator.cpp     2007-08-08 11:32:10.000000000 +0100
    @@ -1566,11 +1572,12 @@
         else if(name == Or::name) {
              UnionQP *unionOp = new (&memMgr_) UnionQP(&memMgr_);
    +          result.operation = unionOp;
              for(VectorOfASTNodes::iterator i = args.begin(); i != args.end(); ++i) {
                   PathResult ret = generate(*i, ids);
                   unionOp->addArg(ret.operation);
    +               if(ret.operation == 0) result.operation = 0;
    -          result.operation = unionOp;
         // These operators use the presence of the node arguments, not their valueJohn

  • The Bug about 'DB_SECONDARY_BAD' still exists in BerkeleyDB4.8!

    The Bug about 'DB_SECONDARY_BAD' still exists in BerkeleyDB4.8?
    I'm sorry for my poor English, But I just cannot find anywhere else for help.
    Thanks for your patience first!
    I'm using BDB4.8 C++ API on Ubuntu 10.04, Linux Kernel 2.6.32-24-generic
    $uname -a
    $Linux wonpc 2.6.32-24-generic #43-Ubuntu SMP Thu Sep 16 14:17:33 UTC 2010 i686 GNU/Linux
    When I update(overwrite) a record in database, I may get a DB_SECONDARY_BAD exception,
    What's worse, This case doesn't always occures, it's random. So I think it probably a bug
    of BDB, I have seen many issues about DB_SECONDARY_BAD with BDB4.5,4.6...
    To reproduce the issue, I make a simplified test program from my real program.
    The data to be stroed into database is a class called 'EntryData', It's defined in db_access.h,
    where also defines some HighLevel API functions that hide the BDB calls, such as
    store_entry_data(), which use EntryData as its argument. The EntryData have a string-type
    member-data 'name' and a vector<string>-type mem-data 'labels', So store_entry_data() will
    put the real data of EntryData to a contiguous memory block. The get_entry_data() returns
    an EntryData builed up from the contiguous memory block fetched from database.
    The comlete test program is post following this line:
    /////////db_access.h////////////
    #ifndef __DB_ACCESS_H__
    #define __DB_ACCESS_H__
    #include <string>
    #include <vector>
    #include <db_cxx.h>
    class EntryData;
    //extern Path DataDir; // default value, can be changed
    extern int database_setup();
    extern int database_close();
    extern int store_entry_data(const EntryData&, u_int32_t = DB_NOOVERWRITE);
    extern int get_entry_data(const std::string&, EntryData*, u_int32_t = 0);
    extern int rm_entry_data(const std::string&);
    class DBSetup
    // 构造时调用database_setup, 超出作用域自动调用database_close .
    // 该类没有数据成员.
    public:
    DBSetup() {
    database_setup();
    ~DBSetup() {
    database_close();
    class EntryData
    public:
    typedef std::vector<std::string> LabelContainerType;
    EntryData() {}
    EntryData(const std::string& s) : name(s) {}
    EntryData(const std::string& s, LabelContainerType& v)
    : name(s), labels(v) {}
    EntryData(const std::string&, const char*[]);
    class DataBlock;
    // 直接从内存块中构建, mem指针将会从数据库中获取,
    // 它就是EntryData转化成的DataBlock中buf_ptr->buf的内容.
    EntryData(const void* mem_blk, const int len);
    ~EntryData() {};
    const std::string& get_name () const { return name; }
    const LabelContainerType& get_labels() const { return labels; }
    void set_name (const std::string& s) { name = s; }
    void add_label(const std::string&);
    void rem_label(const std::string&);
    void show() const;
    // get contiguous memory for all:
    DataBlock get_block() const { return DataBlock(*this); }
    class DataBlock
    // contiguous memory for all.
    public:
    DataBlock(const EntryData& data);
    // 引进一块内存作为 buf_ptr->buf 的内容.
    // 例如从数据库中获取结果
    DataBlock(void* mem, int len);
    // 复制构造函数:
    DataBlock(const DataBlock& orig) :
    data_size(orig.data_size),
    capacity(orig.capacity),
    buf_ptr(orig.buf_ptr) { ++buf_ptr->use; }
    // 赋值操作符:
    DataBlock& operator=(const DataBlock& oth)
    data_size = oth.data_size;
    capacity = oth.capacity;
    if(--buf_ptr->use == 0)
    delete buf_ptr;
    buf_ptr = oth.buf_ptr;
    return *this;
    ~DataBlock() {
    if(--buf_ptr->use == 0) { delete buf_ptr; }
    // data()函数因 Dbt 构造函数不支持const char*而被迫返回 char*
    // data() 返回的指针是应该被修改的.
    const char* data() const { return buf_ptr->buf; }
    int size() const { return data_size; }
    private:
    void pack_str(const std::string& s);
    static const int init_capacity = 100;
    int data_size; // 记录数据块的长度.
    int capacity; // 已经分配到 buf 的内存大小.
    class SmartPtr; // 前向声明.
    SmartPtr* buf_ptr;
    class SmartPtr
    friend class DataBlock;
    char* buf;
    int use;
    SmartPtr(char* p) : buf(p), use(1) {}
    ~SmartPtr() { delete [] buf; }
    private:
    std::string name; // entry name
    LabelContainerType labels; // entry labels list
    }; // class EntryData
    #endif
    //////db_access.cc/////////////
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <vector>
    #include <algorithm>
    #include "directory.h"
    #include "db_access.h"
    using namespace std;
    static Path DataDir("~/mydict_data"); // default value, can be changed
    const Path& get_datadir() { return DataDir; }
    static DbEnv myEnv(0);
    static Db db_bynam(&myEnv, 0); // using name as key
    static Db db_bylab(&myEnv, 0); // using label as key
    static int generate_keys_for_db_bylab
    (Db* sdbp, const Dbt* pkey, const Dbt* pdata, Dbt* skey)
    EntryData entry_data(pdata->get_data(), pdata->get_size());
    int lab_num = entry_data.get_labels().size();
    Dbt* tmpdbt = (Dbt*) malloc( sizeof(Dbt) * lab_num );
    memset(tmpdbt, 0, sizeof(Dbt) * lab_num);
    EntryData::LabelContainerType::const_iterator
    lab_it = entry_data.get_labels().begin(), lab_end = entry_data.get_labels().end();
    for(int i = 0; lab_it != lab_end; ++lab_it, ++i) {
    tmpdbt[ i ].set_data( (void*)lab_it->c_str() );
    tmpdbt[ i ].set_size( lab_it->size() );
    skey->set_flags(DB_DBT_MULTIPLE | DB_DBT_APPMALLOC);
    skey->set_data(tmpdbt);
    skey->set_size(lab_num);
    return 0;
    //@Return Value: return non-zero at error
    extern int database_setup()
    const string DBEnvHome (DataDir + "DBEnv");
    const string dbfile_bynam("dbfile_bynam");
    const string dbfile_bylab("dbfile_bylab");
    db_bylab.set_flags(DB_DUPSORT);
    const u_int32_t env_flags = DB_CREATE | DB_INIT_MPOOL;
    const u_int32_t db_flags = DB_CREATE;
    rmkdir(DBEnvHome);
    try
    myEnv.open(DBEnvHome.c_str(), env_flags, 0);
    db_bynam.open(NULL, dbfile_bynam.c_str(), NULL, DB_BTREE, db_flags, 0);
    db_bylab.open(NULL, dbfile_bylab.c_str(), NULL, DB_BTREE, db_flags, 0);
    db_bynam.associate(NULL, &db_bylab, generate_keys_for_db_bylab, 0);
    } catch(DbException &e) {
    cerr << "Err when open DBEnv or Db: " << e.what() << endl;
    return -1;
    } catch(std::exception& e) {
    cerr << "Err when open DBEnv or Db: " << e.what() << endl;
    return -1;
    return 0;
    int database_close()
    try {
    db_bylab.close(0);
    db_bynam.close(0);
    myEnv.close(0);
    } catch(DbException &e) {
    cerr << e.what();
    return -1;
    } catch(std::exception &e) {
    cerr << e.what();
    return -1;
    return 0;
    // 返回Dbt::put()的返回值
    int store_entry_data(const EntryData& e, u_int32_t flags)
    int res = 0;
    try {
    EntryData::DataBlock blk(e);
    // data()返回的buf中存放的第一个字符串便是 e.get_name().
    Dbt key ( (void*)blk.data(), strlen(blk.data()) + 1 );
    Dbt data( (void*)blk.data(), blk.size() );
    res = db_bynam.put(NULL, &key, &data, flags);
    } catch (DbException& e) {
    cerr << e.what() << endl;
    throw; // 重新抛出.
    return res;
    // 返回 Db::get()的返回值, 调用成功时 EntryData* e的值才有意义
    int get_entry_data
    (const std::string& entry_name, EntryData* e, u_int32_t flags)
    Dbt key( (void*)entry_name.c_str(), entry_name.size() + 1 );
    Dbt data;
    data.set_flags(DB_DBT_MALLOC);
    int res = db_bynam.get(NULL, &key, &data, flags);
    if(res == 0)
    new (e) EntryData( data.get_data(), data.get_size() );
    free( data.get_data() );
    return res;
    int rm_entry_data(const std::string& name)
    Dbt key( (void*)name.c_str(), name.size() + 1 );
    cout << "to remove: \'" << name << "\'" << endl;
    int res = db_bynam.del(NULL, &key, 0);
    return res;
    EntryData::EntryData(const std::string& s, const char* labels_arr[]) : name(s)
    {   // labels_arr 需要以 NULL 结尾.
    for(const char** i = labels_arr; *i != NULL; i++)
    labels.push_back(*i);
    EntryData::EntryData(const void* mem_blk, const int len)
    const char* buf = (const char*)mem_blk;
    int consumed = 0; // 已经消耗的mem_blk的大小.
    name = buf; // 第一串为 name
    consumed += name.size() + 1;
    for (string label = buf + consumed;
    consumed < len;
    consumed += label.size() + 1)
    label = buf + consumed;
    labels.push_back(label);
    void EntryData::add_label(const string& new_label)
    if(find(labels.begin(), labels.end(), new_label)
    == labels.end())
    labels.push_back(new_label);
    void EntryData::rem_label(const string& to_rem)
    LabelContainerType::iterator iter = find(labels.begin(), labels.end(), to_rem);
    if(iter != labels.end())
    labels.erase(iter);
    void EntryData::show() const {
    cout << "name: " << name << "; labels: ";
    LabelContainerType::const_iterator it, end = labels.end();
    for(it = labels.begin(); it != end; ++it)
    cout << *it << " ";
    cout << endl;
    EntryData::DataBlock::DataBlock(const EntryData& data) :
    data_size(0),
    capacity(init_capacity),
    buf_ptr(new SmartPtr(new char[init_capacity]))
    pack_str(data.name);
    for(EntryData::LabelContainerType::const_iterator \
    i = data.labels.begin();
    i != data.labels.end();
    ++i) { pack_str(*i); }
    void EntryData::DataBlock::pack_str(const std::string& s)
    int string_size = s.size() + 1; // to put sting in buf separately.
    if(capacity >= data_size + string_size) {
    memcpy(buf_ptr->buf + data_size, s.c_str(), string_size);
    else {
    capacity = (data_size + string_size)*2; // 分配尽可能大的空间.
    buf_ptr->buf = (char*)realloc(buf_ptr->buf, capacity);
    memcpy(buf_ptr->buf + data_size, s.c_str(), string_size);
    data_size += string_size;
    //////////// test_put.cc ///////////
    #include <iostream>
    #include <string>
    #include <cstdlib>
    #include "db_access.h"
    using namespace std;
    int main(int argc, char** argv)
    if(argc < 2) { exit(EXIT_FAILURE); }
    DBSetup setupup_mydb;
    int res = 0;
    EntryData ed(argv[1], (const char**)argv + 2);
    res = store_entry_data(ed);
    if(res != 0) {
         cerr << db_strerror(res) << endl;
         return res;
    return 0;
    // To Compile:
    // $ g++ -ldb_cxx -lboost_regex -o test_put test_put.cc db_access.cc directory.cc
    //////////// test_update.cc ///////////
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <boost/program_options.hpp>
    #include "db_access.h"
    using namespace std;
    namespace po = boost::program_options;
    int main(int argc, char** argv)
    if(argc < 2) { exit(EXIT_SUCCESS); }
    DBSetup setupup_mydb;
    int res = 0;
    po::options_description cmdopts("Allowed options");
    po::positional_options_description pos_opts;
    cmdopts.add_options()
    ("entry", "Specify the entry that will be edited")
    ("addlabel,a", po::value< vector<string> >(),
    "add a label for specified entry")
    ("removelabel,r", po::value< vector<string> >(),
    "remove the label of specified entry")
    pos_opts.add("entry", 1);
    po::variables_map vm;
    store( po::command_line_parser(argc, argv).
    options(cmdopts).positional(pos_opts).run(), vm );
    notify(vm);
    EntryData entry_data;
    if(vm.count("entry")) {
    const string& entry_to_edit = vm["entry"].as<string>();
    res = get_entry_data( entry_to_edit, &entry_data );
    switch (res)
    case 0:
    break;
    case DB_NOTFOUND:
    cerr << "No entry named: \'"
    << entry_to_edit << "\'\n";
    return res;
    break;
    default:
    cerr << db_strerror(res) << endl;
    return res;
    } else {
    cerr << "No entry specified\n";
    exit(EXIT_FAILURE);
    EntryData new_entry_data(entry_data);
    typedef vector<string>::const_iterator VS_CI;
    if(vm.count("addlabel")) {
    const vector<string>& to_adds = vm["addlabel"].as< vector<string> >();
    VS_CI end = to_adds.end();
    for(VS_CI i = to_adds.begin(); i != end; ++i) {
    new_entry_data.add_label(*i);
    if(vm.count("removelabel")) {
    const vector<string>& to_rems = vm["removelabel"].as< vector<string> >();
    VS_CI end = to_rems.end();
    for(VS_CI i = to_rems.begin(); i != end; ++i) {
    new_entry_data.rem_label(*i);
    cout << "Old data| ";
    entry_data.show();
    cout << "New data| ";
    new_entry_data.show();
    res = store_entry_data(new_entry_data, 0); // set flags to zero permitting Over Write
    if(res != 0) {
    cerr << db_strerror(res) << endl;
    return res;
    return 0;
    // To Compile:
    // $ g++ -ldb_cxx -lboost_regex -lboost_program_options -o test_update test_update.cc db_access.cc directory.cc

    ////////directory.h//////
    #ifndef __DIRECTORY_H__
    #define __DIRECTORY_H__
    #include <string>
    #include <string>
    #include <sys/types.h>
    using std::string;
    class Path
    public:
    Path() {}
    Path(const std::string&);
    Path(const char* raw) { new (this) Path(string(raw)); }
    Path upper() const;
    void operator+= (const std::string&);
    // convert to string (char*):
    //operator std::string() const {return spath;}
    operator const char*() const {return spath.c_str();}
    const std::string& str() const {return spath;}
    private:
    std::string spath; // the real path
    inline Path operator+(const Path& L, const string& R)
    Path p(L);
    p += R;
    return p;
    int rmkdir(const string& path, const mode_t mode = 0744, const int depth = -1);
    #endif
    ///////directory.cc///////
    #ifndef __DIRECTORY_H__
    #define __DIRECTORY_H__
    #include <string>
    #include <string>
    #include <sys/types.h>
    using std::string;
    class Path
    public:
    Path() {}
    Path(const std::string&);
    Path(const char* raw) { new (this) Path(string(raw)); }
    Path upper() const;
    void operator+= (const std::string&);
    // convert to string (char*):
    //operator std::string() const {return spath;}
    operator const char*() const {return spath.c_str();}
    const std::string& str() const {return spath;}
    private:
    std::string spath; // the real path
    inline Path operator+(const Path& L, const string& R)
    Path p(L);
    p += R;
    return p;
    int rmkdir(const string& path, const mode_t mode = 0744, const int depth = -1);
    #endif
    //////////////////// All the code is above ////////////////////////////////
    Use the under command
    $ g++ -ldb_cxx -lboost_regex -o test_put test_put.cc db_access.cc directory.cc
    to get a test program that can insert a record to database.
    To insert a record, use the under command:
    $ ./test_put ubuntu linux os
    It will store an EntryData named 'ubuntu' and two labels('linux', 'os') to database.
    Use the under command
    $ g++ -ldb_cxx -lboost_regex -lboost_program_options -o test_update test_update.cc db_access.cc directory.cc
    to get a test program that can update the existing records.
    To update the record, use the under command:
    $ ./test_update ubuntu -r linux -a canonical
    It will update the with the key 'ubuntu', with the label 'linux' removed and a new
    label 'canonical'.
    Great thanks to you if you've read and understood my code!
    I've said that the DB_SECONDARY_BAD exception is random. The same operation may cause
    exception in one time and may goes well in another time.
    As I've test below:
    ## Lines not started with '$' is the stdout or stderr.
    $ ./test_put linux os linus
    $ ./test_update linux -r os
    Old data| name: linux; labels: os linus
    New data| name: linux; labels: linus
    $ ./test_update linux -r linus
    Old data| name: linux; labels: linus
    New data| name: linux; labels:
    dbfile_bynam: DB_SECONDARY_BAD: Secondary index inconsistent with primary
    Db::put: DB_SECONDARY_BAD: Secondary index inconsistent with primary
    terminate called after throwing an instance of 'DbException'
    what(): Db::put: DB_SECONDARY_BAD: Secondary index inconsistent with primary
    已放弃
    Look! I've received a DB_SECONDARY_BAD exception. But thus exception does not always
    happen even under the same operation.
    For the exception is random, you may have not the "luck" to get it during your test.
    So let's insert a record by:
    $ ./test_put t
    and then give it a great number of labels:
    $ for((i = 0; i != 100; ++i)); do ./test_update t -a "label_$i"; done
    and then:
    $ for((i = 0; i != 100; ++i)); do ./test_update t -r "label_$i"; done
    Thus, the DB_SECONDARY_BAD exception is almost certain to happen.
    I've been confused by the problem for times. I would appreciate if someone can solve
    my problem.
    Many thanks!
    Wonder

  • PDF From MS Word 2010 Reported Bug Still Exists

    I need to create a PDF file today that contains images in a MS Word 2010 document.  There is a bug in Acrobat XI Professional  that I reported months ago.  This bug is still here, and now I need help.  Can anyone tell me what I can do to fix this issue?
    Here is what happens, and I just reproduced this problem I found awhile back.  As I stated, I did report it, but this issue is still here!
    I am creating a user guide for software.  I insert BMP images that are screen shots.  On any page where a BMP image exists within Word, the resulting PDF document does not allow selecting of text in Acrobat Reader XI.  The selection goes totally insane and highlights random text through the entire page.  This is a software defect for certain.
    My question is can I easily fix this with minimal time?  I had to fix this last time by removing all images from MS Word and instead pasting the image in Acrobat XI.  When I do this, selecting text works.  The problem with this bug work-around is that this take lots of time (that I do not have).
    Help please???

    I found something even better.  There is a non Adobe PDF creator on my office computer that correctly creates a PDF.   The issue is within PDF creation, because I am using Acrobat Reader XI and selecting text with no problem at all.
    I did not have to change a thing other than not use Adobe Acrobat Professional to create the PDF.  The software that works correctly where Adobe's own fails is called PDF Xchange Driver by Tracker Software Products LTD.
    ...and as I already stated, I reported this issue many months ago...

  • Old kexi bug still exists?

    So I was looking into using something other than phpMyAdmin for editing my databases, so I looked into kexi.  When I used the import "Structure and Data" option, it just populates the tables with empty values.
    After some searching, I found that this use to be an issue a while back: Problem and Resolution.
    Can anyone else confirm this as a still-existing (or reoccurring) bug?
    Or, am I just messing something up along the way?
    Thanks.

    I hope someone can help me... it is very important and i am desperate for answers (BUMP)

  • Does the "Warning! Not Enough Memory" bug still exist in Logic 8?

    Hello everyone,
    I'm wondering if the dreaded "warning, not enough memory" bug still exists in Logic 8. Here is a detailed account of the bug from Logic 7: http://discussions.apple.com/thread.jspa?messageID=767597&#767597
    If this is fixed, I'm seriously considering upgrading mid-project! The film score I'm working on has many doubling parts that I'd like to edit at the same time in the matrix editor. However, editing multiple parts in the matrix editor seems provoke the little bugger, and I've already been bitten a few times in this project already. The only solution I've found is to stay clear of editing multiple parts at once (i.e. edit each parts individually, which obviously takes more time) or save before editing and hope I dont get bit.
    I would LOVE to hear a report that this bug has been exterminated, and perhaps may upgrade mid project if thats the case.
    Thanks in advance for your reply!

    Heya,
    I'm not familiar with the bug you're talking about. But would, as a fellow film composer, strongly urge you against the mid project switch.
    I loaded in LP8 and ofcourse had a look at what it was all about, and it's really really fantastic. It also seems very stable. I fortunately have a side project that I am working on so switched to LP8 for that. Whilst I'm thankful to get my head around a very new approach for logic, I'm also thankful that I have this side project as it has illuminated a multitude of problems that exist with LP8 that would make any scoring process a bit of a headache to say the least. The main one being that if you don't have a very very powerful mac (I'm prepping a really fully loaded 8 core) you are not going to get anywhere near the performance out of Logic as you do with 7. This is a bottom up overhaul and it needs hardware to match. Heck even my 30" cinema display seems cramped and insubstantial on this new version. I would be so bold to say hold off until you have a hearty new mac and at least 8.2 is released IMHO but maybe try and get on it onto a smaller project to familiarize yourself before hand.

  • 3.1EA2 Old bug with German language settings still exists

    In the past I wrote several times about a bug in SQL Developer when running in German language mode. This bug is still not fixed in 3.1 EA2:
    In new folders for user definded reports only the options "Kopieren" and "Speichern unter ..." ('Copy' and 'Cave as') are available, when SQL-Deverloper runs in German language mode. Other options like "Bearbeiten, Neuer Ordner, Neuer Bericht, Ausschneiden, Einfügen, Löschen" (Edit, New Folder, New Report, Cut, Paste, Delete) are missing. A workaround is to force language to English with the line
    AddVMOption -Duser.language=en
    in sqldeveloper.conf
    I mentioned it first in Re: Folders with limited functionality about version 2.1.1.64 and then in 30EA2: Limited folder functionality with German language 3.0 EA2 and German language bug with user defined reports still not fixed Beta Release 3.0 EA3
    Edited by: user1775992 on 22.11.2011 03:30

    I have raised a bug on this issue and I am actively looking into it.

  • Camera issue still exists in AIR 16 beta

    Just tested my simple camera tester with Air 16 Beta and the issue still exists.
    Im refering to the issue were the camera stops responding after a number of attaches/detaches to a video object and if attached multiple calls to setMode.
    The issue im referring to is Bug#3850401 - Handle leak with video.attachCamera leading to inoperable camera

    Just tested my simple camera tester with Air 16 Beta and the issue still exists.
    Im refering to the issue were the camera stops responding after a number of attaches/detaches to a video object and if attached multiple calls to setMode.
    The issue im referring to is Bug#3850401 - Handle leak with video.attachCamera leading to inoperable camera

  • Can't believe the caching bug is STILL there

    Hi,
    I MUST be missing something. It can't be true that this has not been fixed after so many years.
    So well, the problem is, every time you load an external asset or file, say for example using a Loader object or a URLLoader object (the same happened in AS2 with MovieClipLoader, LoadVars, XML.load() etc etc, and even before with loadMovie, etc) - every time you load a file, the Flash Player caches that file, and this is independent from your browser: it is Flash Player's own (and primitive) caching mechanism.
    Whenever you load a file with the same URL again, no matter whether the file has been changed or not, Flash Player will use the cached copy, and there's NO WAY to prevent that - there are a few workaround that I will discuss later but they don't solve the problem completely, besides being terribly combersome.
    Now, the HTTP protocol has a wonderful mechanism to manage the caching of files in an intelligent way, which has been working for years and, I think, was invented even before flash existed, however at least 10 years ago, and it works fine.
    If an HTML page has an IMG tag with an image, for example, and if the browser has already a cached version of the image with that URL, the browser will first ask the server for that file and declare it has a cached version with date xxx; if the server's file is not newer than xxx, then the server replies that the file has not changed and the browser can use its cached version (or insist to redownload it if he wishes). But if the file on the server is newer, the server will reply with the new file, and the browser will NEVER show an obsolete cached version of the image (or whatever file).
    Now, I don't know why, Flash Player was designed in a very primitive way that ignores this whole mechanism provided and standardised by the HTTP protocol. Flash Player will ALWAYS use a cached version of the file if he has one, it won't worry about veryfying whether it is obsolete or not.
    So, unless the user clears its cache, whenever you update an xml, txt, jpg or whatever file that is loaded within your flash application, users that have previously visited the page may still see the old version.
    Now, there's an easy workaround for ensuring that a cached version of the file is NEVER used, which is appending a "?somerandomname="+n to the filename, where n is obtained for example as n=(new Date()).value(); in order to ensure that it is always different.
    This way, the complete url of the file is always different and the cached version will never be used.
    However, this is not a solution either. For small text files it is ok, but for images and swf's for example, you DO want the cached file to be used IF it is not obsolete. Otherwise, returning visitors will always have to wait for the complete download time of everything, including files that have been downloaded yesterday and have not been modified.
    So, this problem has been solved ages ago by the HTTP protocol, but the Flash Player is naive and ignores it.
    I used to use 2 workarounds: the one I have mentioned for small files (texts, xml's), and the following one for files that can be updated every once in a while:
    In the main html page, I append "?lastupdate=dddddd" to the swf name, where dddddd is a manually edited date of the last time something relevant has been updated. So for example:
    <object ....... etc etc> <param name="movie" value="mainswffile.swf?lastupdate=20090625"/>... <embed etc etc etc src="mainswffile.swf?lastupdate=20090625"/></object>
    Or something like that.
    When I update some of the files that are to be loaded, I manually edit the "lastupdate" thing in the html.
    Then in the ActionScript programming I use the _root.lastupdate variable to append to the filenames of images or assets I load.
    All this is horribly cumbersome and error-prone. Image you deploy a website to a client that will be able to update his own texts and images: you have either to explain him how to edit the html file also, or create some complicated server-side or client-side script to manage the cache-avoiding system. That is, reinventing the wheel, in this case the cache.
    Every time a new version of the player was released, I expected it to fix the stupid caching problem and to make my cumbersome tricks obsolete and unnecessary.
    I expected to see that the new version would make proper use of HTTP caching protocol specifications, and use cached files ONLY when they are not outdated, after verifying it with the server according to the HTTP protocol.
    Every new version of the player was a disappointment.
    Then I hope the new version of the language, Action Script 3.0, would fix this.
    No, it seems it doesn't.
    I've done some tests with AS3 and with my great and sad surprise, the caching "bug" is still there.
    Well, the bug, not the "bug": this is a bug proper, because there's no reason why it should work this way.
    So, my question is.
    Maybe am I missing something? Is there a way, by using some method or property of URLLoader, Loader and/or URLRequest, to tell Flash Player to use the cache in an intelligent way? I mean, in a not-astonishingly-stupid way?
    Note that I'm not talking about forcing it to NOT USE cache at all: I mean using a cached version when it is appropriate, and redownloading the file when needed, as all decent http application have done for years.
    Perhaps there IS a way to solve this.... It should be the default behaviour and should be transparent, but however, if there is a SERIOUS fix (not a hackaround), that would at least solve the problem.
    Do anybody know of a method that really works?
    (I have read of people trying by using http headers with caching directives but without success; or in the best case maybe they were able to force never-caching, which is NOT a solution as I explained)
    Thanks in advance.
    And if there is any Adobe developer listening, please fix this bug since it is really a shame that an application written in 2008 or 2009 suffers from a problem that was elegantly and definitely solved in the XX century.
    Regards,
    m.

    I wrote a long reply and when I posted it it vanished.
    I had even control+c'opied it before submitting but it didn't even get into my clipboard.
    Shame on this forum (sorry to say that, but that's what I have to say).
    So, I'll try to write it again but it won't be the same: the amount of rage is augmented.
    Thank you BWolfe for letting me know that Flash now (since last year) has a bug management system. It was also such an enormous shame that it didn't have one.
    Adobe used to confuse bug reports with feature requests; now this kind of confusion is still partially there and it is reflected by the voting thing, which is an absolute aberration. In a decent bug management system, the developers take the responsibility to give the bugs the priority they deserve; and no matter how low the priority, even the smallest bug ALWAYS get into the queue.
    Now this bug we are discussing has been well known for AT LEAST EIGHT YEARS and I am not exaggerating at all, as I started using flash in 2001 and the issue was already mentioned here and there in forums etc; probably some blind people didn't see it as a bug (rather as a situation you have to face or work around), but it was known. And the very solution, as I already pointed out, was there even before Flash was conceived (well, for the sake of scientifical rigour, I should say, before Flash was commercialized): the HTTP protocol has the capability to perfectly manage file caching in a manner transparent to the higher layer.
    So, since I don't believe that nobody at Adobe (formerly Macromedia) has heard about a bug that every intermediate-level actionscript developer in the world knows of, it is already kind of a shame that we have to report it in 2009, but that's ok. But that we have to get votes, no, that's an insult.
    Jesus, ActionScript is a programming language, man, A PROGRAMMING LANGUAGE... it is not like Photoshop or Premiere; and it seems like in so many years, people who manage it haven't yet realised it completely.
    Big Brother contestants should be voted. Feature requests may be voted. Bugs cannot be voted should just be fixed one by one as soon as possible.
    Well, sorry for the rant and thank you for the answers.
    Hope this gets through this time.

  • Black lines in landscape content still exist in v.32.4.4 !!

    Hi
    Adobe should have been fixing this bug in 32.4.4, they did for the Adobe Content viewer.
    But this bug still exists in applications made by DPS App Builder ver 32.4.4.
    Adobe, please make hot fix URGENT
    Thanks
    Eli

    If you rebuild your app with the option "Enable auto hiding of the vertical folio scroll bar" checked this issue will not appear. Will that not work for your app?
    We do plan to release a fix for this on our next scheduled dot release, in approximately a week and a half.

  • Wifi problems still exists?

    I sold my gs60 that had an 870m back in january mainly because i couldnt bare the wifi problem. I really loved the laptop and everything about it but everytime my laptop overheated the wifi would drop from 100mb to 1mb or less at times, monday im thinking of buying a new msi laptop and im wondering if these models that are currently being sold on amazon and etc still have the wifi problem or has it been fixed?
    And trust me, i read the forums, i read the guides and im pretty decent with computers/software and etc, i uninstalled, reinstalled, updated it, changes adv. settings and even though it improves certain things the problem was still there. So does it still exist?
    Or should i just buy a USB wifi?

    This problem only occurs in earlier patches of Intel WiFi card of GS60 2Px (8xx series of NVIDIA graphic cards) and not every unit was affected.
    If you don't want to take this risk, I'll suggest you buy GS60 2Qx (9xx series of NVIDIA graphic cards).
    USB WiFi is a good idea. It certainly has a better signal comparing to the WiFi embedded in the body of the laptop.

  • Every once in a while when I open my mail or a page I get nothing but strange lines of symbols.  Many of the symbols are black triangles with question marks in the center.  I completely reset it like new, but problem still exists

    Every once in a while when I open my mail or open a page I get lines of strange symbols like black triangles with question marks in the center.  I have reset the ipad2 to new condition but the problem still exists.

    A reset does not make tthe iPad "like new."
    First, let's ensure that we agree on just what is a Reset...
    Hold down the on/off switch and the Home button simultaneously until you see the Apple logo.  Ignore the "Slide to power off" text if it appears.  You will not lose any apps, data, music, movies, settings, etc.
    If the Reset doesn't work, try a Restore.  Note that it's nowhere near as quick as a Reset.  Connect via cable to the computer that you use for sync.  From iTunes, select the iPad/iPod and then select the Summary tab.  Follow directions for Restore and be sure to say "yes" to the backup.  You will be warned that all data (apps, music, movies, etc.) will be erased but, as the Restore finishes, you will be asked if you wish the contents of the backup to be copied to the iPad/iPod.  Again, say "yes."
    At the end of the basic Restore, you will be asked if you wish to sync the iPad/iPod.  As before, say "yes."  Note that that sync selection will disappear and the Restore will end if you do not respond within a reasonable time.  If that happens, only the apps that are part of the IOS will appear on your device.  Corrective action is simple -  choose manual "Sync" from the bottom right of iTunes.
    If you're unable to do the Restore, go into Recovery Mode per the instructions here.

  • My IPOD Classic Video 5. Gen. showed videos, but now it does no longer show them, instead i see a black picture on my IPOD and it doesn`t work. I have to restart it every time, i try it. i restore the software with itunes, but the problem still exists.

    My IPOD Classic Video 5. Gen. showed videos, but now it does no longer show them, instead i see a black picture on my IPOD and it doesn`t work. I have to restart it every time, i try it. i restore the software with itunes, but the problem still exists.
    The Videos are showed up front 4 months, but now they are no longer to be seen. When you star a video first the hard drive starts, but then it stops and hangs up. I have to restart it, starting with the apple logo....

    Here is what worked for me:
      My usb hub, being usb2, was too fast. I moved the wire to a usb port directory on my pc. That is a usb1 port which is slow enough to run your snyc.

  • HT3529 Have an Iphone 5 and had to restore.  I recieved text message and replied after restore but they are no longer in thread.I did not erase. past messages still exist.  Did sending party delete them? If so can I retreave them?

    Have an Iphone 5 and had to restore.  I recieved text message and replied after restore but they are no longer in thread.I did not erase. past messages still exist.  Did sending party delete them? If so can I retreave them?

    No, they probably got lost out there somewhere. They're gone.

  • I copied message to SMS field and sent. After that the message still exist all the time in the SMS field. When I open the application I must always first delete the "saved"  ones before I write the new one. What to do to finally/definitely delete the save

    I copied message to SMS field and sent. After that the message still exist all the time in the SMS field. When I open the application I must always first delete the “saved”  ones before I write the new one. What to do to finally/definitely delete the save message?

    sorry it's ios6

Maybe you are looking for

  • How to have Windows Print prompt pop up when printing SBO documents

    Version 8.8 SP00 PL14 I have SBO Print Preferences for Sales Order and AR Invoice set to NOT Print on Add. I have PLD layouts with defined printers assigned to users. I want the user to be able to change the defined printer when printing a document.

  • How do you reduce the burn speed on a pc???

    I've been getting the dreaded 4310 error and discovered, through searching the discussions, that reducing the burn speed could solve the problem. However, I can't find anything on how to do that on a pc? I have a compaq nc6000 laptop. I've had the pr

  • Show/hide elements in DW CS3

    I've just posted this question and got a reply from John Waller, thanks John, but what I mean is that I don't want to use layers, this has to do with the positioning in a table. I want to add images to a table which is in a layer so I can put margin-

  • Does exists a diagnosis tool to test the mac mini cd dvd unit ?

    Just befor decide to ask for assistance. Thanks

  • Font stuck in bold

    I am trying to add & edit text on my website with Contribute 4......All the text is bold and I can not seem to change that. Any suggestions?